Skip to content

Instantly share code, notes, and snippets.

@hnakamur
Created June 23, 2017 00:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save hnakamur/a4bce7e98c94b2f8163856abb0280579 to your computer and use it in GitHub Desktop.
Save hnakamur/a4bce7e98c94b2f8163856abb0280579 to your computer and use it in GitHub Desktop.
trafficserverでis_response_cacheableの呼び出し元をたどるコードリーディング
対象バージョンは6.2.0
bool
HttpTransact::is_response_cacheable(State *s, HTTPHdr *request, HTTPHdr *response)
の実装
https://github.com/apache/trafficserver/blob/6.2.0/proxy/http/HttpTransact.cc#L6127
is_response_cacheable の検索結果
```
proxy/InkAPI.cc|8789| return (req->valid() && resp->valid() && HttpTransact::is_response_cacheable(&(sm->t_state), req, resp)) ? 1 : 0;
proxy/http/HttpTransact.cc|2098| if (is_response_cacheable(s, &s->hdr_info.server_request, &s->hdr_info.server_response)) {
proxy/http/HttpTransact.cc|4181| cacheable = is_response_cacheable(s, &s->hdr_info.client_request, &s->hdr_info.server_response);
proxy/http/HttpTransact.cc|6044| // We can do the check in is_response_cacheable() or here.
proxy/http/HttpTransact.cc|6117| // Name : is_response_cacheable()
proxy/http/HttpTransact.cc|6127| HttpTransact::is_response_cacheable(State *s, HTTPHdr *request, HTTPHdr *response)
proxy/http/HttpTransact.cc|6135| DebugTxn("http_trans", "[is_response_cacheable] "
proxy/http/HttpTransact.cc|6151| DebugTxn("http_trans", "[is_response_cacheable] "
proxy/http/HttpTransact.cc|6155| // DebugTxn("http_trans", "[is_response_cacheable] method is cacheable");
proxy/http/HttpTransact.cc|6160| DebugTxn("http_trans", "[is_response_cacheable] "
proxy/http/HttpTransact.cc|6172| DebugTxn("http_trans", "[is_response_cacheable] "
proxy/http/HttpTransact.cc|6178| DebugTxn("http_trans", "[is_response_cacheable] "
proxy/http/HttpTransact.cc|6186| DebugTxn("http_trans", "[is_response_cacheable] server does not permit storing and config file does not "
proxy/http/HttpTransact.cc|6190| // DebugTxn("http_trans", "[is_response_cacheable] server permits storing");
proxy/http/HttpTransact.cc|6197| DebugTxn("http_trans", "[is_response_cacheable] config doesn't allow storing, and cache control does not "
proxy/http/HttpTransact.cc|6201| // DebugTxn("http_trans", "[is_response_cacheable] config permits storing");
proxy/http/HttpTransact.cc|6205| DebugTxn("http_trans", "[is_response_cacheable] client does not permit storing, "
proxy/http/HttpTransact.cc|6209| DebugTxn("http_trans", "[is_response_cacheable] client permits storing");
proxy/http/HttpTransact.cc|6225| DebugTxn("http_trans", "[is_response_cacheable] "
proxy/http/HttpTransact.cc|6232| DebugTxn("http_trans", "[is_response_cacheable] "
proxy/http/HttpTransact.cc|6242| DebugTxn("http_trans", "[is_response_cacheable] "
proxy/http/HttpTransact.cc|6255| DebugTxn("http_trans", "[is_response_cacheable] "
proxy/http/HttpTransact.cc|6265| DebugTxn("http_trans", "[is_response_cacheable] YES by response cache control");
proxy/http/HttpTransact.cc|6275| "[is_response_cacheable] Cache-control header directives in response overridden by ttl in cache.config");
proxy/http/HttpTransact.cc|6277| DebugTxn("http_trans", "[is_response_cacheable] NO by response cache control");
proxy/http/HttpTransact.cc|6297| DebugTxn("http_trans", "[is_response_cacheable] YES response w/ Expires");
proxy/http/HttpTransact.cc|6302| DebugTxn("http_trans", "[is_response_cacheable] cache-control or expires header is required for 302");
proxy/http/HttpTransact.cc|6309| DebugTxn("http_trans", "[is_response_cacheable] POST method with a TTL");
proxy/http/HttpTransact.cc|6311| DebugTxn("http_trans", "[is_response_cacheable] NO POST w/o Expires or CC");
proxy/http/HttpTransact.cc|6321| DebugTxn("http_trans", "[is_response_cacheable] YES by default ");
proxy/http/HttpTransact.cc|6324| DebugTxn("http_trans", "[is_response_cacheable] NO by default");
proxy/http/HttpTransact.cc|6346| DebugTxn("http_trans", "[is_response_cacheable] request has AUTHORIZATION - not cacheable");
proxy/http/HttpTransact.cc|6350| // DebugTxn("http_trans","[is_response_cacheable] request has AUTHORIZATION, "
proxy/http/HttpTransact.h|1292| static bool is_response_cacheable(State *s, HTTPHdr *request, HTTPHdr *response);
```
is_response_cacheableの呼び出し箇所は以下の3か所。
```
proxy/InkAPI.cc|8789| return (req->valid() && resp->valid() && HttpTransact::is_response_cacheable(&(sm->t_state), req, resp)) ? 1 : 0;
proxy/http/HttpTransact.cc|2098| if (is_response_cacheable(s, &s->hdr_info.server_request, &s->hdr_info.server_response)) {
proxy/http/HttpTransact.cc|4181| cacheable = is_response_cacheable(s, &s->hdr_info.client_request, &s->hdr_info.server_response);
```
1か所目
int
TSHttpTxnIsCacheable(TSHttpTxn txnp, TSMBuffer request, TSMBuffer response)
https://github.com/apache/trafficserver/blob/6.2.0/proxy/InkAPI.cc#L8789
2か所目
void
HttpTransact::HandlePushResponseHdr(State *s)
https://github.com/apache/trafficserver/blob/6.2.0/proxy/http/HttpTransact.cc#L2098
3か所目
void
HttpTransact::handle_cache_operation_on_forward_server_response(State *s)
https://github.com/apache/trafficserver/blob/6.2.0/proxy/http/HttpTransact.cc#L4181
TSHttpTxnIsCacheableの検索結果
```
plugins/experimental/cache_range_requests/cache_range_requests.cc|217| bool cacheable = TSHttpTxnIsCacheable(txnp, NULL, response);
plugins/experimental/background_fetch/background_fetch.cc|460| bool cacheable = TSHttpTxnIsCacheable(txnp, NULL, response);
proxy/InkAPI.cc|8767| TSHttpTxnIsCacheable(TSHttpTxn txnp, TSMBuffer request, TSMBuffer response)
proxy/api/ts/ts.h|2359| tsapi int TSHttpTxnIsCacheable(TSHttpTxn txnp, TSMBuffer request, TSMBuffer response);
```
HandlePushResponseHdrの検索結果
```
proxy/http/HttpTransact.cc|2064| TRANSACT_RETURN(SM_ACTION_READ_PUSH_HDR, HandlePushResponseHdr);
proxy/http/HttpTransact.cc|2068| // Name : HandlePushResponseHdr
proxy/http/HttpTransact.cc|2076| HttpTransact::HandlePushResponseHdr(State *s)
proxy/http/HttpSM.cc|1098| call_transact_and_set_next_state(HttpTransact::HandlePushResponseHdr);
proxy/http/HttpTransact.h|1254| static void HandlePushResponseHdr(State *s);
```
https://github.com/apache/trafficserver/blob/6.2.0/proxy/http/HttpTransact.cc#L2064
void
HttpTransact::HandleCacheOpenReadPush(State *s, bool read_successful)
https://github.com/apache/trafficserver/blob/6.2.0/proxy/http/HttpSM.cc#L1098
int
HttpSM::state_read_push_response_header(int event, void *data)
HandleCacheOpenReadPush の検索結果
```
proxy/http/HttpTransact.cc|2048| // Name : HandleCacheOpenReadPush
proxy/http/HttpTransact.cc|2056| HttpTransact::HandleCacheOpenReadPush(State *s, bool read_successful)
proxy/http/HttpTransact.cc|2226| HandleCacheOpenReadPush(s, read_successful);
proxy/http/HttpTransact.h|1253| static void HandleCacheOpenReadPush(State *s, bool read_successful);
```
https://github.com/apache/trafficserver/blob/6.2.0/proxy/http/HttpTransact.cc#L2226
void
HttpTransact::HandleCacheOpenRead(State *s)
HandleCacheOpenRead の検索結果
```
proxy/InkAPI.cc|4806| sm->t_state.transact_return_point = HttpTransact::HandleCacheOpenRead;
proxy/http/HttpTransact.cc|1833| TRANSACT_RETURN(SM_ACTION_API_OS_DNS, HandleCacheOpenReadMiss);
proxy/http/HttpTransact.cc|1841| TRANSACT_RETURN(SM_ACTION_API_OS_DNS, HandleCacheOpenReadHit);
proxy/http/HttpTransact.cc|1843| TRANSACT_RETURN(SM_ACTION_API_OS_DNS, HandleCacheOpenReadMiss);
proxy/http/HttpTransact.cc|2048| // Name : HandleCacheOpenReadPush
proxy/http/HttpTransact.cc|2053| // Called on PUSH requests from HandleCacheOpenRead
proxy/http/HttpTransact.cc|2056| HttpTransact::HandleCacheOpenReadPush(State *s, bool read_successful)
proxy/http/HttpTransact.cc|2182| // Name : HandleCacheOpenRead
proxy/http/HttpTransact.cc|2197| HttpTransact::HandleCacheOpenRead(State *s)
proxy/http/HttpTransact.cc|2199| DebugTxn("http_trans", "[HttpTransact::HandleCacheOpenRead]");
proxy/http/HttpTransact.cc|2226| HandleCacheOpenReadPush(s, read_successful);
proxy/http/HttpTransact.cc|2233| HandleCacheOpenReadMiss(s);
proxy/http/HttpTransact.cc|2241| TRANSACT_RETURN(SM_ACTION_API_READ_CACHE_HDR, HandleCacheOpenReadHitFreshness);
proxy/http/HttpTransact.cc|2388| HttpTransact::HandleCacheOpenReadHitFreshness(State *s)
proxy/http/HttpTransact.cc|2393| DebugTxn("http_seq", "[HttpTransact::HandleCacheOpenReadHitFreshness] Hit in cache");
proxy/http/HttpTransact.cc|2396| DebugTxn("http_trans", "[HandleCacheOpenReadHitFreshness] Delete and return");
proxy/http/HttpTransact.cc|2415| DebugTxn("http_trans", "[HandleCacheOpenReadHitFreshness] request_sent_time : %" PRId64, (int64_t)s->request_sent_time);
proxy/http/HttpTransact.cc|2416| DebugTxn("http_trans", "[HandleCacheOpenReadHitFreshness] response_received_time : %" PRId64, (int64_t)s->response_received_time);
proxy/http/HttpTransact.cc|2425| DebugTxn("http_seq", "[HttpTransact::HandleCacheOpenReadHitFreshness] "
proxy/http/HttpTransact.cc|2430| DebugTxn("http_seq", "[HttpTransact::HandleCacheOpenReadHitFreshness] "
proxy/http/HttpTransact.cc|2435| DebugTxn("http_seq", "[HttpTransact::HandleCacheOpenReadHitFreshness] "
proxy/http/HttpTransact.cc|2455| TRANSACT_RETURN(SM_ACTION_API_CACHE_LOOKUP_COMPLETE, HttpTransact::HandleCacheOpenReadHit);
proxy/http/HttpTransact.cc|2457| } else { // we have done dns . Its up to HandleCacheOpenReadHit to decide to go OS or serve from cache
proxy/http/HttpTransact.cc|2458| TRANSACT_RETURN(SM_ACTION_API_CACHE_LOOKUP_COMPLETE, HttpTransact::HandleCacheOpenReadHit);
proxy/http/HttpTransact.cc|2502| DebugTxn("http_seq", "[HttpTransact::HandleCacheOpenReadHit] "
proxy/http/HttpTransact.cc|2508| DebugTxn("http_seq", "[HttpTransact::HandleCacheOpenReadHit] "
proxy/http/HttpTransact.cc|2513| DebugTxn("http_seq", "[HttpTransact::HandleCacheOpenReadHit] "
proxy/http/HttpTransact.cc|2518| DebugTxn("http_seq", "[HttpTransact::HandleCacheOpenReadHit] "
proxy/http/HttpTransact.cc|2546| // Name : HandleCacheOpenReadHit
proxy/http/HttpTransact.cc|2578| HttpTransact::HandleCacheOpenReadHit(State *s)
proxy/http/HttpTransact.cc|2597| DebugTxn("http_seq", "[HttpTransact::HandleCacheOpenReadHit] "
proxy/http/HttpTransact.cc|2603| DebugTxn("http_seq", "[HttpTransact::HandleCacheOpenReadHit] "
proxy/http/HttpTransact.cc|2608| DebugTxn("http_seq", "[HttpTransact::HandleCacheOpenReadHit] "
proxy/http/HttpTransact.cc|2610| HandleCacheOpenReadMiss(s);
proxy/http/HttpTransact.cc|2613| DebugTxn("http_seq", "[HttpTransact::HandleCacheOpenReadHit] "
proxy/http/HttpTransact.cc|2668| DebugTxn("http_seq", "[HttpTransact::HandleCacheOpenReadHit] "
proxy/http/HttpTransact.cc|2674| DebugTxn("http_trans", "[HandleCacheOpenReadHit] ICP is configured"
proxy/http/HttpTransact.cc|2791| DebugTxn("http_seq", "[HttpTransact::HandleCacheOpenReadHit] "
proxy/http/HttpTransact.cc|2827| // and HandleCacheOpenReadHit().
proxy/http/HttpTransact.cc|2906| DebugTxn("http_seq", "[HttpTransact::HandleCacheOpenReadHit] Out-of-order Range request - tunneling");
proxy/http/HttpTransact.cc|2909| HandleCacheOpenReadMiss(s); // DNS is already completed no need of doing DNS
proxy/http/HttpTransact.cc|3054| HandleCacheOpenReadHitFreshness(s);
proxy/http/HttpTransact.cc|3077| // Name : HandleCacheOpenReadMiss
proxy/http/HttpTransact.cc|3093| HttpTransact::HandleCacheOpenReadMiss(State *s)
proxy/http/HttpTransact.cc|3095| DebugTxn("http_trans", "[HandleCacheOpenReadMiss] --- MISS");
proxy/http/HttpTransact.cc|3096| DebugTxn("http_seq", "[HttpTransact::HandleCacheOpenReadMiss] "
proxy/http/HttpTransact.cc|3100| DebugTxn("http_trans", "[HandleCacheOpenReadMiss] Delete and return");
proxy/http/HttpTransact.cc|3139| DebugTxn("http_trans", "[HandleCacheOpenReadMiss] "
proxy/http/HttpSM.cc|2600| call_transact_and_set_next_state(HttpTransact::HandleCacheOpenRead);
proxy/http/HttpSM.cc|2618| t_state.transact_return_point = HttpTransact::HandleCacheOpenRead;
proxy/http/HttpTransact.h|1218| static void HandleCacheOpenRead(State *s);
proxy/http/HttpTransact.h|1219| static void HandleCacheOpenReadHitFreshness(State *s);
proxy/http/HttpTransact.h|1220| static void HandleCacheOpenReadHit(State *s);
proxy/http/HttpTransact.h|1221| static void HandleCacheOpenReadMiss(State *s);
proxy/http/HttpTransact.h|1253| static void HandleCacheOpenReadPush(State *s, bool read_successful);
```
HandleCacheOpenRead の呼び出し箇所は以下の4か所
```
proxy/InkAPI.cc|4806| sm->t_state.transact_return_point = HttpTransact::HandleCacheOpenRead;
proxy/http/HttpSM.cc|2600| call_transact_and_set_next_state(HttpTransact::HandleCacheOpenRead);
proxy/http/HttpSM.cc|2618| t_state.transact_return_point = HttpTransact::HandleCacheOpenRead;
```
TSReturnCode
TSHttpTxnCacheLookupStatusSet(TSHttpTxn txnp, int cachelookup)
https://github.com/apache/trafficserver/blob/6.2.0/proxy/InkAPI.cc#L4806
int
HttpSM::state_cache_open_read(int event, void *data)
https://github.com/apache/trafficserver/blob/6.2.0/proxy/http/HttpSM.cc#L2600
https://github.com/apache/trafficserver/blob/6.2.0/proxy/http/HttpSM.cc#L2618
TSHttpTxnCacheLookupStatusSet の検索結果
```
proxy/InkAPI.cc|4791| TSHttpTxnCacheLookupStatusSet(TSHttpTxn txnp, int cachelookup)
proxy/api/ts/ts.h|2322| tsapi TSReturnCode TSHttpTxnCacheLookupStatusSet(TSHttpTxn txnp, int cachelookup);
```
TSHttpTxnCacheLookupStatusSet は呼び出し箇所なし
state_cache_open_read の検索結果
```
proxy/http/HttpSM.cc|2563| // HttpSM::state_cache_open_read()
proxy/http/HttpSM.cc|2571| HttpSM::state_cache_open_read(int event, void *data)
proxy/http/HttpSM.cc|2573| STATE_ENTER(&HttpSM::state_cache_open_read, event);
proxy/http/HttpSM.cc|2609| DebugSM("http", "[state_cache_open_read] open read failed.");
proxy/http/HttpSM.cc|7229| HTTP_SM_SET_DEFAULT_HANDLER(&HttpSM::state_cache_open_read);
proxy/http/HttpCacheSM.cc|89| // HttpCacheSM::state_cache_open_read()
proxy/http/HttpCacheSM.cc|115| HttpCacheSM::state_cache_open_read(int event, void *data)
proxy/http/HttpCacheSM.cc|117| STATE_ENTER(&HttpCacheSM::state_cache_open_read, event);
proxy/http/HttpCacheSM.cc|159| Debug("http_cache", "[%" PRId64 "] [state_cache_open_read] cache open read failure %d. "
proxy/http/HttpCacheSM.cc|281| SET_HANDLER(&HttpCacheSM::state_cache_open_read);
proxy/http/HttpSM.h|378| int state_cache_open_read(int event, void *data);
proxy/http/HttpCacheSM.h|191| int state_cache_open_read(int event, void *data);
```
HttpSM::state_cache_open_read の呼び出し箇所
```
proxy/http/HttpSM.cc|2573| STATE_ENTER(&HttpSM::state_cache_open_read, event);
proxy/http/HttpSM.cc|7229| HTTP_SM_SET_DEFAULT_HANDLER(&HttpSM::state_cache_open_read);
```
int
HttpSM::state_cache_open_read(int event, void *data)
https://github.com/apache/trafficserver/blob/6.2.0/proxy/http/HttpSM.cc#L2573
void
HttpSM::set_next_state()
...
case HttpTransact::SM_ACTION_CACHE_LOOKUP: {
HTTP_SM_SET_DEFAULT_HANDLER(&HttpSM::state_cache_open_read);
do_cache_lookup_and_read();
break;
}
https://github.com/apache/trafficserver/blob/6.2.0/proxy/http/HttpSM.cc#L7229
set_next_state の検索結果
```
proxy/http/HttpUpdateSM.cc|104| call_transact_and_set_next_state(&HttpTransact::ModifyRequest);
proxy/http/HttpUpdateSM.cc|185| HttpUpdateSM::set_next_state()
proxy/http/HttpUpdateSM.cc|200| HttpSM::set_next_state();
proxy/http/HttpTransact.cc|543| **** which is called from HttpSM::set_next_state to specify ****
proxy/http/HttpSM.cc|613| call_transact_and_set_next_state(HttpTransact::HandleBlindTunnel);
proxy/http/HttpSM.cc|741| call_transact_and_set_next_state(HttpTransact::BadRequest);
proxy/http/HttpSM.cc|752| call_transact_and_set_next_state(HttpTransact::BadRequest);
proxy/http/HttpSM.cc|816| call_transact_and_set_next_state(HttpTransact::ModifyRequest);
proxy/http/HttpSM.cc|872| call_transact_and_set_next_state(NULL);
proxy/http/HttpSM.cc|1038| call_transact_and_set_next_state(HttpTransact::HandleBadPushRespHdr);
proxy/http/HttpSM.cc|1089| call_transact_and_set_next_state(HttpTransact::HandleBadPushRespHdr);
proxy/http/HttpSM.cc|1098| call_transact_and_set_next_state(HttpTransact::HandlePushResponseHdr);
proxy/http/HttpSM.cc|1142| call_transact_and_set_next_state(HttpTransact::HandleResponse);
proxy/http/HttpSM.cc|1167| call_transact_and_set_next_state(HttpTransact::OriginServerRawOpen);
proxy/http/HttpSM.cc|1232| call_transact_and_set_next_state(HttpTransact::handle_transform_ready);
proxy/http/HttpSM.cc|1305| call_transact_and_set_next_state(HttpTransact::HandleApiErrorJump);
proxy/http/HttpSM.cc|1546| call_transact_and_set_next_state(HttpTransact::HandleResponse);
proxy/http/HttpSM.cc|1549| call_transact_and_set_next_state(HttpTransact::HandleApiErrorJump);
proxy/http/HttpSM.cc|1570| // mess of set_next_state()
proxy/http/HttpSM.cc|1599| call_transact_and_set_next_state(NULL);
proxy/http/HttpSM.cc|1686| call_transact_and_set_next_state(HttpTransact::HandleRequest);
proxy/http/HttpSM.cc|1779| call_transact_and_set_next_state(HttpTransact::HandleResponse);
proxy/http/HttpSM.cc|1784| call_transact_and_set_next_state(HttpTransact::HandleResponse);
proxy/http/HttpSM.cc|1788| call_transact_and_set_next_state(HttpTransact::HandleResponse);
proxy/http/HttpSM.cc|1910| call_transact_and_set_next_state(HttpTransact::HandleResponse);
proxy/http/HttpSM.cc|2219| call_transact_and_set_next_state(NULL);
proxy/http/HttpSM.cc|2240| call_transact_and_set_next_state(NULL);
proxy/http/HttpSM.cc|2271| call_transact_and_set_next_state(NULL);
proxy/http/HttpSM.cc|2341| call_transact_and_set_next_state(HttpTransact::HandleStatPage);
proxy/http/HttpSM.cc|2346| call_transact_and_set_next_state(HttpTransact::HandleStatPage);
proxy/http/HttpSM.cc|2378| * pending_action=NULL only if we have to set_next_state. *
proxy/http/HttpSM.cc|2384| // set_next_state();
proxy/http/HttpSM.cc|2440| call_transact_and_set_next_state(HttpTransact::HandleICPLookup);
proxy/http/HttpSM.cc|2448| // This state is set by set_next_state() for a cache open write
proxy/http/HttpSM.cc|2549| call_transact_and_set_next_state(NULL);
proxy/http/HttpSM.cc|2600| call_transact_and_set_next_state(HttpTransact::HandleCacheOpenRead);
proxy/http/HttpSM.cc|2886| call_transact_and_set_next_state(HttpTransact::HandlePushTunnelSuccess);
proxy/http/HttpSM.cc|2888| call_transact_and_set_next_state(HttpTransact::HandlePushTunnelFailure);
proxy/http/HttpSM.cc|3990| call_transact_and_set_next_state(HttpTransact::HandleRequest); // HandleRequest skips EndRemapRequest
proxy/http/HttpSM.cc|3998| call_transact_and_set_next_state(NULL);
proxy/http/HttpSM.cc|4104| call_transact_and_set_next_state(NULL);
proxy/http/HttpSM.cc|4137| call_transact_and_set_next_state(NULL);
proxy/http/HttpSM.cc|4600| call_transact_and_set_next_state(HttpTransact::HandleApiErrorJump);
proxy/http/HttpSM.cc|4885| call_transact_and_set_next_state(HttpTransact::HandleResponse);
proxy/http/HttpSM.cc|4889| call_transact_and_set_next_state(HttpTransact::HandleResponse);
proxy/http/HttpSM.cc|5291| call_transact_and_set_next_state(HttpTransact::HandleResponse);
proxy/http/HttpSM.cc|5478| call_transact_and_set_next_state(HttpTransact::HandleResponse);
proxy/http/HttpSM.cc|5527| call_transact_and_set_next_state(NULL);
proxy/http/HttpSM.cc|7055| // HttpSM::call_transact_and_set_next_state(f)
proxy/http/HttpSM.cc|7070| HttpSM::call_transact_and_set_next_state(TransactEntryFunc_t f)
proxy/http/HttpSM.cc|7087| set_next_state();
proxy/http/HttpSM.cc|7094| // HttpSM::set_next_state()
proxy/http/HttpSM.cc|7096| // call_transact_and_set_next_state() was broken into two parts, one
proxy/http/HttpSM.cc|7098| // next state. In a case which set_next_state() was not completed,
proxy/http/HttpSM.cc|7099| // the state function calls set_next_state() to retry setting the
proxy/http/HttpSM.cc|7104| HttpSM::set_next_state()
proxy/http/HttpSM.cc|7125| call_transact_and_set_next_state(NULL);
proxy/http/HttpSM.cc|7134| call_transact_and_set_next_state(NULL);
proxy/http/HttpSM.cc|7151| call_transact_and_set_next_state(NULL);
proxy/http/HttpSM.cc|7163| call_transact_and_set_next_state(NULL);
proxy/http/HttpSM.cc|7169| call_transact_and_set_next_state(HttpTransact::HandleFiltering);
proxy/http/HttpSM.cc|7198| call_transact_and_set_next_state(NULL);
proxy/http/HttpSM.cc|7204| call_transact_and_set_next_state(NULL);
proxy/http/HttpSM.cc|7211| call_transact_and_set_next_state(NULL);
proxy/http/HttpSM.cc|7466| call_transact_and_set_next_state(NULL);
proxy/http/HttpSM.cc|7505| call_transact_and_set_next_state(NULL);
proxy/http/HttpSM.cc|7553| set_next_state();
proxy/http/HttpSM.h|471| virtual void set_next_state();
proxy/http/HttpSM.h|472| void call_transact_and_set_next_state(TransactEntryFunc_t f);
proxy/http/HttpUpdateSM.h|66| void set_next_state();
```
HttpSM::set_next_state の呼び出し箇所
```
proxy/http/HttpUpdateSM.cc|200| HttpSM::set_next_state();
proxy/http/HttpSM.cc|7087| set_next_state();
proxy/http/HttpSM.cc|7553| set_next_state();
```
void
HttpUpdateSM::set_next_state()
https://github.com/apache/trafficserver/blob/6.2.0/proxy/http/HttpUpdateSM.cc#L200
void
HttpSM::call_transact_and_set_next_state(TransactEntryFunc_t f)
https://github.com/apache/trafficserver/blob/6.2.0/proxy/http/HttpSM.cc#L7087
int
HttpSM::state_congestion_control_lookup(int event, void *data)
https://github.com/apache/trafficserver/blob/6.2.0/proxy/http/HttpSM.cc#L7553
HttpUpdateSM::set_next_state の呼び出し箇所は見当たらず。
このあたりで挫折。
HttpSM::call_transact_and_set_next_state はさまざまな場合に呼ばれていて単に関数呼び出しで辿ろうとしても関係ないところも含まれてしまう。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment