Ceph学习——Librados与Osdc实现源码解析

本文深入剖析Ceph客户端的Librados和Osdc模块。Librados包含RadosClient和IoctxImpl,负责Pool管理和对象操作,而Osdc则用于封装对象操作、计算对象地址及处理超时。RadosClient的connect()、create_ioctx()等函数实现系统和pool的管理,IoctxImpl处理IO操作,AioCompletionImpl处理异步IO完成时的回调。Osdc的ObjectOperation、Op_target和Op等结构封装了操作细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文介绍Ceph客户端方面的某些模块的实现。客户端主要是实现了接口,对外提供访问的功能。上层可以通过接口来访问Ceph存储。Librados 与 Osdc 位于Ceph客户端中比较底层的位置,Librados 提供了Pool的创建、删除、对象的创建、删除等基本接口;Osdc则用于封装操作,计算对象的地址,发送请求和处理超时。如图:


这里写图片描述

根据LIBRADOS架构图,叙述大概的事件流程。在 Ceph分布式存储实战中 这本书中有如下一段话:
先根据配置文件调用LIBRADOS创建一个RADOS,接下来为这个RADOS创建一个radosclient,radosclient包含3个主要模块(finisher、Message、Objector)。再根据pool创建对应的ioctx,在ioctx中能够找到radosclient。在调用OSDC生成对应的OSD请求,与OSD进行通信响应请求。这从大体上叙述了librados与osdc在整个Ceph中的作用。

Librados

该模块包含两个部分,分别是RadosClient 模块和IoctxImpl。RadosClient处于最上层,是librados的核心管理类,管理着整个RADOS系统层面以及pool层面的管理。而IoctxImpl则对于其中的某一个pool进行管理,如对 对象的读写等操作的控制。

Created with Raphaël 2.1.0 RadosClient(Librados模块) IoctxImpl(Librados模块) Objecter(Osdc 模块)

RadosClient类

先看头文件 radosclient.h

class librados::RadosClient : public Dispatcher//继承自Dispatcher(消息分发类)
{
  std::unique_ptr<CephContext,
          std::function<void(CephContext*)> > cct_deleter;//unique_ptr智能指针

public:
  using Dispatcher::cct;
  md_config_t *conf;//配置文件
private:
  enum {
    DISCONNECTED,
    CONNECTING,
    CONNECTED,
  } state;//网络连接状态

  MonClient monclient;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
  MgrClient mgrclient;
  Messenger *messenger;//!!!!!!!!!!!!!!!!!!网络消息接口 !!!!!!!!!!!!!!!!!!!!!!!

  uint64_t instance_id;

  //相关消息分发 Dispatcher类的函数重写
  bool _dispatch(Message *m);
  ...
  ...
  bool ms_handle_refused(Connection *con) override;

  Objecter *objecter;//!!!!!!!!!!!!!!!!!!!!!!Osdc模块中的 用于发送封装好的OP消息!!!!!!!!!!!!!

 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值