TFS源码解析三

10 篇文章 0 订阅

NameServer中依赖的service.cpp


#include <exception>       // C++中定义的异常头文件

#include <tbsys.h>         // tbsys头文件

#include <Memory.hpp>    // 在tbsys中定义的内存封装头文件

#include "nameserver.h"    // nameserver头文件

#include "block_collect.h"   // block处理头文件

 

int main(int argc, char* argv[])

{

  tfs::nameserver::NameServer service;  // 定义nameserver服务

  return service.main(argc, argv);       // 启动nameserver服务主程序,根据输入命令行

                                  // 读取配置文件,启动daemon程序

}

 

从main函数入口,程序依赖NameServer类的实现



NameServer中的NameServer.h

#ifndef TFS_NAMESERVER_NAMESERVER_H_

#define TFS_NAMESERVER_NAMESERVER_H_

 

#include "common/internal.h"      #基础功能内部头文件声明

#include "common/base_service.h"  #基础功能基本服务头文件声明

#include "ns_define.h"            #nameserver内部状态及统计信息文件声明

#include "layout_manager.h"       #nameserver内部线程管理文件声明

#include "heart_manager.h"       #nameserver心跳检测、主备切换管理文件声明

 

namespace tfs

{

  namespace nameserver

  {

    class NameServer;

class NameServer: public common::BaseService  // 每个主程序都继承于BaseService类,

                                    // 抽象出公共的BaseService,

                                    // 使得每个实体服务都有包、网络流的实现

    {

    public:

      NameServer();

      virtual ~NameServer();

      /** initialize application data*/

      virtual int initialize(int argc, char* argv[]);  // 初始化

 

      /** destroy application data*/

      virtual int destroy_service();            // 删除服务,回收资源

 

      /** create the packet streamer, this is used to create packet according to packet code */

      virtual tbnet::IPacketStreamer* create_packet_streamer()  // 创建报文流,

      {

 return new common::BasePacketStreamer();        // 类似于new操作的写法

      }

 

      /** destroy the packet streamer*/

      virtual void destroy_packet_streamer(tbnet::IPacketStreamer* streamer)

      {

        tbsys::gDelete(streamer);   // gDelete 封装的delete函数

      }

 

      /** create the packet streamer, this is used to create packet*/

      virtual common::BasePacketFactory* create_packet_factory()

      {

        return new message::MessageFactory();   // 生成报文

      }

 

      /** destroy packet factory*/

      virtual void destroy_packet_factory(common::BasePacketFactory* factory)

      {

        tbsys::gDelete(factory);

      }

 

      /** handle single packet */

      virtual tbnet::IPacketHandler::HPRetCode handlePacket(tbnet::Connection *connection, tbnet::Packet *packet);

 

      /** handle packet*/

      virtual bool handlePacketQueue(tbnet::Packet *packet, void *args);

 

      int callback(common::NewClient* client);

 

      LayoutManager& get_layout_manager() { return layout_manager_;}

      HeartManagement& get_heart_management() { return heart_manager_;}

 

   private:

      DISALLOW_COPY_AND_ASSIGN(NameServer);   // 封装拷贝构造函数及重载赋值语句

      LayoutManager layout_manager_;

      NameServerHeartManager master_slave_heart_manager_;

      HeartManagement heart_manager_;

    protected:

      /** get log file path*/

      virtual const char* get_log_file_path() { return NULL;}

 

      /** get pid file path */

      virtual const char* get_pid_file_path() { return NULL;}

 

    private:

      int open(common::BasePacket* msg);

      int close(common::BasePacket* msg);

      int batch_open(common::BasePacket* msg);

      int update_block_info(common::BasePacket* msg);

      int show_server_information(common::BasePacket* msg);

      int resolve_block_version_conflict(common::BasePacket* msg);

      int ping(common::BasePacket* msg);

      int dump_plan(common::BasePacket* msg);

      int client_control_cmd(common::BasePacket* msg);

      int do_master_msg_helper(common::BasePacket* packet);

      int do_slave_msg_helper(common::BasePacket* packet);

      int get_family_info(common::BasePacket* msg);

 

      int initialize_ns_global_info();

    };

  }/** nameserver **/

}/** tfs **/

#endif



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值