osd的多副本读写流程

这篇博客详细介绍了Ceph OSD中多副本数据读写流程,涉及数据结构如pg_pool_t、MOSDOp和ObjectContext等。读写流程包括客户端请求接收、请求处理、日志操作、副本同步以及回调处理。关键函数包括OSD::handle_op、ReplicatedPG::do_op、ReplicatedPG::execute_ctx、ReplicatedPG::issue_repop和ReplicatedBackend::submit_transaction。文章分析了并发性和顺序性,确保了数据一致性。
摘要由CSDN通过智能技术生成

数据结构

struct pg_pool_t{  

  enum {

    TYPE_REPLICATED = 1,     // 多副本

    //TYPE_RAID4 = 2,   // raid4 (never implemented)

    TYPE_ERASURE = 3,      // EC

  };

  uint64_t flags;            //定义了多种flags,例如FLAG_FULL

  __u8 type;               //多副本或EC

  __u8 size, min_size;      //副本数和至少保证的副本数

  __u8 crush_ruleset;       ///< ruleset的id

  __u8 object_hash;         //映射hash算法

private:

  __u32 pg_num, pgp_num;    ///< number of pgs

};   

 

class MOSDOp : public Message {

 

  static const int HEAD_VERSION = 5;

  static const int COMPAT_VERSION = 3;

 

private:

  uint32_t client_inc;   //client id

  __u32 osdmap_epoch; //版本号

  __u32 flags;   //客户端请求带的flags,例如CEPH_OSD_FLAG_ACK

  utime_t mtime;  //客户端请求所带的mtime

 

  object_t oid;  //操作的对象

  object_locator_t oloc; //对象的位置信息?

  pg_t pgid;  //对象所在的pgid

public:

  vector<OSDOp> ops; //多个操作集合

……

}  

 

struct OSDOp {

  ceph_osd_op op;

  sobject_t soid;

  bufferlist indata,outdata;

  int32_t rval;

};

struct ObjectState {

  object_info_t oi;

  bool exists;  

};

struct ObjectContext {

  ObjectState obs;//对象当前的状态

  SnapSetContext *ssc;//快照上下文信息

  Context *destructor_callback;//对象析构的时候快照相关

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值