当前位置: 首页 > 工具软件 > rados-java > 使用案例 >

java 访问ceph rgw_ceph RGW接口源码解析--Rados数据操作

盛浩阔
2023-12-01

RGW业务处理流程:

http reqest --> apache 转 FastCgi module

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

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

1、数据结构

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

//桶的权限创建资料

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;

//桶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;

//用户UID资料

struct RGWUserInfo

2、s3元数据原子操作

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

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

3、元数据操作句柄

在Rgw_bucket.h中定义

class RGWUserBuckets

在Rgw_bucket.cc中实现

class RGWBucketInstanceMetadataHandler : public RGWMetadataHandler

class RGWBucketMetadataHandler : public RGWMetadataHandler

4、rados接口实现

在rgw_rados.h 定义了RGWRados,实现了所有与rados相关的操作接口

 类似资料: