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