Ceph网络模块(2) - AsyncMessenger组织结构

Ceph网络模块(2) - AsyncMessenger数据结构分析


本文主要介绍AsyncMessenger的代码框架结构和主要使用到的数据结构

这里写图片描述

上图表示Ceph的AsyncMessenger模块中各个关键类之间的联系。在AsyncMessenger模块中用到的类主要有14个,下面逐一介绍每个类的作用,以及其中包含的主要成员变量和方法。


1、 AsyncMessenger类、SimplePolicyMessenger类和Messenger类

AsyncMessenger类、SimplePolicyMessenger类和Messenger类三者是继承与被继承的关系,Messenger是一个抽象的消息管理器,其主要接口在派生类AsyncMessenger中实现,SimplePolicyMessenger类则是对消息管理器的一些连接的策略进行定义的设置,AsyncMessenger中定义和实现了消息管理器的相关成员变量以及方法。

一个AsyncMessenger实例的关键成员变量以及类方法如下表所示(包括该类继承的父类成员变量以及类方法)。AsyncMessenger包含一个WorkerPool对象、一个Processor实例,以及3个AsyncConnectionRef对象列表和1个ConnectionRef对象列表。


AsyncMessenger类中的成员变量:

成员变量名 返回值类型 描述
*pool WorkerPool 通过pool->get_worker()从线程池中获取工作线程来进行工作
processor Processor Processor实例,主要用来监听连接,绑定socket,接受连接请求等,相当于AsyncMessenger的处理中心
listen_sd int 定义的监听套接字
conns ceph::unordered_map(entity_addr_t, AsyncConnectionRef) 地址和连接的map表,创建一个新的连接时将连接和和地址信息加入到这个map表中,在发送消息时先根据地址对这个map进行一次查找,如果找到了返回连接,如果没有找到创建一个新的连接。
accepting_conns set(AsyncConnectionRef) 接收连接的集合,这个集合主要存放那些已经接收的连接。
deleted_conns set(AsyncConnectionRef) 已经关闭并且需要清理的连接的集合
local_connection ConnectionRef 本地连接的计数器
did_bind bool 初始值为false,绑定地址后置为true,stop的时候再次置为false

AsynsMessenger类中的成员方法:

成员方法名 返回值类型 描述
bind (const entity_addr_t& bind_addr) int 绑定套接字,具体绑定过程是由Processor的bind()函数完成的
start() int 注册一个AsyncMessenger的实例后,启动这个实例,具体执行过程是WokerPool的start()函数完成的。
wait() void 等待停止的信号,如果收到停止的信息后,调用Processor的stop()函数,然后将did_bind置为false,最后删除建立的连接
send_message (Message *m, const entity_inst_t& dest) int 加了一个锁,然后调用_send_message(m, dest),将消息发送到目的地址
get_connection (const entity_inst_t& dest) ConnectionRef 函数用来建立连接,判定是否为本地连接,否则再继续查找连接是否已经存在,如果不存在再创建一个连接
ready() void 注册的AsyncMessenger已经准备好了,启动事件处理中心,开始工作,启动工作线程
create_connect(const entity_addr_t& addr, int type) AsyncConnectionRef create一个连接并将其加到conns中
submit_message(Message *m, AsyncConnectionRef con,const entity_addr_t& dest_addr, int dest_type) void 发送消息的时候会用到,根据目的地址判断需要发送消息的连接是否存在,以及连接是否是本地连接,如果是本地连接,直接对消息进行dispatch,如果连接不存在,需要根据消息类型创建新的连接
_send_message(Message *m, const entity_inst_t& dest) int 从连接中查找目的地址,然后调用s
  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值