【ceph】RGW/RadosGW框架/源码分析

本文深入分析了RadosGW的main()函数和process_request()函数,涉及前端WebServer初始化、libcurl、Ceph集群操作以及S3 API的处理。详细阐述了bucket相关操作,如list bucket、stat bucket、create bucket、delete bucket的处理流程及其返回响应的处理。同时介绍了bucket metadata的管理,包括RGWBucketMetadataHandler和RGWBucketInstanceMetadataHandler的角色。
摘要由CSDN通过智能技术生成

RadosGW分析

一、RadosGW的main()函数解析。

RadosGW的main()函数位于rgw_main.cc中,该函数是RadosGW的入口函数。这里主要解析和RadosGW相关的内容,尽量省略WebServer的内容。

main()函数解析如下:

1、根据g_conf->rgw_frontends得到默认支持的前端WebServers,目前默认支持的前端WebServer包括fastcgi和civetweb。对于每一个支持的前端都有一个RGWFrontendConfig类与之对应,最后将WebServer的名字和对应的RGWFrontendConfig类设置到fe_map集合中;

2、调用global_init()函数做初始化操作;

3、调用rgw_tool_init()函数从g_conf->rgw_mime_type_file指定的文件中读取该文件中的数据并初始化;

4、调用curl_global_init()函数初始化libcurl,由此可以看出rgw使用curl进行网络数据传输;

5、调用FCGX_Init()初始化WebServer;

6、调用RGWStoreManager::get_storage()函数初始化librados对象,即:以后对Ceph集群的操作都得通过该librados对象;

7、调用rgw_rest_init()初始化rest部分;

8、调用rgw_user_init()函数初始化radosgw中关于用户部分的类RGWUserMetadataHandler,且将该类注册到store->meta_mgr中;

9、调用rgw_buckt_init()函数初始化radosgw中关于bucket部分的类RGWBucketMetadataHandler和RGWBucketInstanceMetadataHandler,且将这两个类注册到store->meta_mgr中;

10、对于兼容S3的API来说,使用RGWRESTMgr_S3类作为radosgw中rest接口的默认处理类;

11、对于支持admin的操作来说,注册管理员操作对应的类RGWRESTMgr_Usage/RGWRESTMgr_User/RGWRESTMgr_Bucket/RGWRESTMgr_Metadata/RGWRESTMgr_Log/RGWRESTMgr_Opstate/RGWRESTMgr_ReplicaLog/RGWRESTMgr_Config/RGWRESTMgr_Realm;

12、注册信号处理函数,处理诸如SIGUP/SIGTERM等信号;

13、初始化前端WebServer并运行前端WebServer;

14、调用wait_shutdown()函数等待radosgw进程执行完毕;

实际的Web请求处理位于rgw_process.cc::process_request()函数内,该函数负责处理Web前端的数据读写请求。

二、process_request()函数分析流程

int process_request(RGWRados* store, RGWREST* rest, RGWRequest* req, RGWStreamIO* client_io, OpsLogSocket* olog)

参数说明:

store:在rgw_main.cc中的main()函数中调用的RGWStoreManager::get_storage()的返回值;

rest:在rgw_main.cc中的main()函数中调用rest.register_default_mgr(new RGWRESTMgr_S3())的返回值,也就是说rest是类RGWRESTMgr_S3的实例;

处理流程:

1)rest->get_handler():得到RGWHandler_REST类实例,包括:RG

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值