ceph 网络模块 源码分析 一
ceph的网络模块主要用于各进程之间的通信,主要用于src/msg目录中.
网络模块中最基础的两个部分是Messenger和Message,前者用于消息的接收和发送,后者表示消息本身.
本篇主要简单介绍下消息类Message.
消息
消息的定义比较简单,它直接使用类Message来实现,ceph中不同类型的消息都是通过继承Message类来实现的,当然用户也可以通过继承Message来自定义其它类型的消息.想要了解ceph中定义和使用的不同message类型,可以参考src/messages目录.
ceph的消息主要由消息头header,消息内容data和消息尾footer组成,当然还有其它一些元数据,比如发送时间,接受时间等.Message的成员函数主要由各种set()和get()组成,主要用于设置或者获取Message中的数据成员.
class Message {
protected:
ceph_msg_header header; // 消息头
ceph_msg_footer footer; // 消息尾
bufferlist data; // 消息本身
utime_t recv_stamp; // 消息开始接收的时间
utime_t recv_complete_stamp; // 消息结束接收的时间
utime_t dispatch_stamp; // 消息发送的时间
ConnectionRef connection; // 消息属于的连接
uint32_t magic; // 消息魔术字,主要用校验
}
消息头
消息头相当于消息的信封,它定义了消息的一些元数据,比方说消息的序号,事务id,类型,优先级,版本号,以及消息的长度等.
struc