rgw入口程序对应src/rgw/rgw_main.cc文件,此文件的main函数除了常规的信号、参数处理外,首先设置resource_manager,这些manager将HTTP请求根据url派发到不同的RGWHandler中去处理;然后根据rgw_frontends配置项,启动一个frontend用来接收HTTP请求,默认情况下是使用RGWMongooseFrontend作为frontend,它会将src/rgw/rgw_processing.cc:process_request
函数作为回掉传给civetweb,所以一个请求的完整处理过程全部在process_request
函数中完成。
process_request
函数的工作流程主要分两步:
- 生成一个RGWHandler,使用handler进行一系列处理。
- 生成一个RGWOp,使用op进行一系列处理。
整个处理流程如下
注:op->verify_permission对于RESTOp(如usage、metadata等)则会进行caps检查。
RGWREST::get_handler
首先解析url,然后调用相应的resource manager的get_handler
方法, manager的get_handler
方法会首先调用RGWHandler_REST_S3::init_from_header
来初始化req_state中的bucket、info、object等信息。