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