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相關的操做接口