squid缓存处理流程
2016-01-07 15:40:09 0 举报
squid缓存处理函数调用关系
作者其他创作
大纲/内容
storeClientCopy,注册回调函数clientReplyContext::CacheHit
网络请求流程
clientReadRequest
ClientRequestContext::clientAccessCheck
clientReplyContext::buildMaxBodySizeclientReplyContext::processReplyAccessResult
MemObject::MemObject
此处计算hash时,以unified_url替换URL
clientReplyContext::identifyStoreObject
创建ClientRequestContext,并赋给ClientHttpRequest的calloutContext
调用回调函数
StoreEntry::storeGetPublicByRequest
注册回调clientAccessCheckDoneWrapper
store_client::scheduleMemRead
对URL进行归一化计算,保存为unified_url
N,即缓存命中
clientReplyContext::identifyFoundObject (NullStoreEntry::getInstance())
注册回调checkNoCacheDoneWrapper
clientReplyContext::cacheHit
根据refresh配置项来处理,默认对URL带?的会直接请求源。已做特殊处理
设置logtype,调用clientReplyContext::doGetMoreData
ClientHttpRequest::processRequest
storeOpen,返回值赋给swapin_sio
storeSwapInStart
Y
读取磁盘文件流程
store_client::scheduleDiskRead
clientReplyContext::processMiss
请求原始服务器
设置log_type,判断是否需要processMiss(),若不需则调用clientReplyContext::sendMoreData
HttpParserParseReqLine
读取磁盘缓存文件
swapin_sio==NULL
调用clientStreamInit注册clientGetMoreData为readfunc,clientSocketRecipient为callback
创建HttpRequest
调用HttpRequest::parseHeader解析请求包头
store_client::scheduleRead
调用readfunc回调函数clientGetMoreData
clientReplyContext::processReplyAccess
acl相关流程
获取URL,method,version等
ACLChecklist::checkCallback
HTTP解析以及相关初始化
调用clientStreamNode成员next的callback,即clientSocketRecipient
Y,未命中缓存
Store::Root().get(storeKeyPublicByRequestMethod)
parseHttpRequest
clientProcessRequest
clientInterpretRequestHeaders
storeClientListAdd
store_client::copy
StoreEntry::getPublicByRequest
clientReplyContext::created
如果mem_obj为空则调用StoreEntry::createMemObject
FwdState::fwdStart
hdrCacheInit
clientStreamRead
clientReplyContext::identifyFoundObject
storeClientCopy2
FwdState::startComplete
refreshCheckHTTP
ClientHttpRequest::doCallouts
store_client::startSwapin
store_client::fileRead
往Client socket写数据ClientSocketContext::sendStartOfMessageClientSocketContext::sendBodyClientSocketContext::writeComplete
现改为全走Y流程,即不管是否有cachable标志,都先从缓存查找
store_client::doCopy
FwdState::start
HttpHeaderEntry::parse解析包头一个字段,创建HttpHeaderEntry
创建clientReplyContext
调用回调函数clientReplyContext::CacheHit
ClientRequestContext::clientRedirectStart
ACLChecklist::check
MemObject::addClient
ACLChecklist::nonBlockingCheck
storeEntry==NULL
缓存回包
flags.cachable==1
comm_write_mbuf设置回调为clientWriteComplete
clientStreamCallback
N
ClientHttpRequest::httpStart
注册clientReadRequest回调函数
创建ClientSocketContext
storeKeyPublicByRequestMethod, 根据method和URL获取cache_key
ConnStateData::readSomeData
FwdState::connectStart
clientParseRequest
创建ClientHttpRequest,设置uri和log_uri
ClientRequestContext::checkNoCache
HttpHeader::parse
此处会检查mem_obj里的URL和request的URL是否一致,若不一致会当做缓存未命中来对待。已做特殊处理
获取缓存信息
ACLChecklist::checkAccessList
0 条评论
下一页