rgw入口程序?qū)?yīng)src/rgw/rgw_main.cc文件,此文件的main函數(shù)除了常規(guī)的信號、參數(shù)處理外,首先設(shè)置resource_manager,這些manager將HTTP請求根據(jù)url派發(fā)到不同的RGWHandler中去處理;然后根據(jù)rgw_frontends配置項,啟動一個frontend用來接收HTTP請求,默認情況下是使用RGWMongooseFrontend作為frontend,它會將src/rgw/rgw_processing.cc:process_request
函數(shù)作為回掉傳給civetweb,所以一個請求的完整處理過程全部在process_request
函數(shù)中完成。
process_request
函數(shù)的工作流程主要分兩步:
- 生成一個RGWHandler,使用handler進行一系列處理。
- 生成一個RGWOp,使用op進行一系列處理。
整個處理流程如下
rgw_processing
注:op->verify_permission對于RESTOp(如usage、metadata等)則會進行caps檢查。
RGWREST::get_handler
首先解析url,然后調(diào)用相應(yīng)的resource manager的get_handler
方法, manager的get_handler
方法會首先調(diào)用RGWHandler_REST_S3::init_from_header
來初始化req_state中的bucket、info、object等信息。