ceph RGW接口源码解析--Rados数据操做

RGW业务处理流程:apache

http reqest --> apache 转 FastCgi module数据结构

FastCgi module --> radosgw  经过socket请求实现(未肯定是否有其它方式)socket

radosgw --> ceph集群  经过socket实现,调用rados接口ui


一、数据结构this

在Rgw_common.h定义了基本的数据结构,并实现了 decode、encode序列化,方便对rados访问
code

//桶的权限建立资料
接口

struct RGWBucketInfo 
{
  rgw_bucket bucket;
  string owner;
  uint32_t flags;
  string region;
  time_t creation_time;
  string placement_rule;
  bool has_instance_obj;
  RGWObjVersionTracker objv_tracker; /* we don't need to serialize this, for runtime tracking */
  obj_version ep_objv; /* entry point object version, for runtime tracking only */
  RGWQuotaInfo quota;string

io

//桶pool位置存储组成
struct rgw_bucket {
  std::string name;
  std::string data_pool;
  std::string data_extra_pool; /* if not set, then we should use data_pool instead */
  std::string index_pool;
  std::string marker;
  std::string bucket_id;
  std::string oid;
 }ast

//用户UID资料

struct RGWUserInfo

二、s3元数据原子操做

在rgw_op.h定义元数据的原子操做,RGWOp做为基类

建立桶的原子类定义:class RGWCreateBucket : public RGWOp

三、元数据操做句柄

在Rgw_bucket.h中定义
    class RGWUserBuckets

在Rgw_bucket.cc中实现
  class RGWBucketInstanceMetadataHandler : public RGWMetadataHandler
  class RGWBucketMetadataHandler : public RGWMetadataHandler

四、rados接口实现

在rgw_rados.h 定义了RGWRados,实现了全部与rados相关的操做接口

相关文章
相关标签/搜索