MCPcopy Create free account
hub / github.com/apache/trafficserver / response_is_retryable

Function response_is_retryable

src/proxy/http/HttpTransact.cc:397–436  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

395}
396
397inline static ParentRetry_t
398response_is_retryable(HttpTransact::State *s, HTTPStatus response_code)
399{
400 if (!HttpTransact::is_response_valid(s, &s->hdr_info.server_response) || s->current.request_to != ResolveInfo::PARENT_PROXY) {
401 return PARENT_RETRY_NONE;
402 }
403 if (s->response_action.handled) {
404 return s->response_action.action.responseIsRetryable ? PARENT_RETRY_SIMPLE : PARENT_RETRY_NONE;
405 }
406 const url_mapping *mp = s->url_map.getMapping();
407 if (mp && mp->strategy) {
408 return mp->strategy->responseIsRetryable(s->state_machine->sm_id, s->current, response_code);
409 }
410
411 if (s->parent_params && !s->parent_result.response_is_retryable((ParentRetry_t)(s->parent_result.retry_type()), response_code)) {
412 return PARENT_RETRY_NONE;
413 }
414 const unsigned int s_retry_type = retry_type(s);
415 // If simple or both, check if code is simple-retryable and for retry attempts
416 if ((s_retry_type & PARENT_RETRY_SIMPLE) && s->parent_result.response_is_retryable(PARENT_RETRY_SIMPLE, response_code) &&
417 s->current.simple_retry_attempts < max_retries(s, PARENT_RETRY_SIMPLE)) {
418 TxnDbg(dbg_ctl_http_trans, "saw parent retry simple first in trans");
419 if (s->current.simple_retry_attempts < numParents(s)) {
420 return PARENT_RETRY_SIMPLE;
421 }
422 return PARENT_RETRY_NONE;
423 }
424 // If unavailable or both, check if code is unavailable-retryable AND also not simple-retryable, then unavailable retry attempts
425 if ((s_retry_type & PARENT_RETRY_UNAVAILABLE_SERVER) &&
426 s->parent_result.response_is_retryable(PARENT_RETRY_UNAVAILABLE_SERVER, response_code) &&
427 !s->parent_result.response_is_retryable(PARENT_RETRY_SIMPLE, response_code) &&
428 s->current.unavailable_server_retry_attempts < max_retries(s, PARENT_RETRY_UNAVAILABLE_SERVER)) {
429 TxnDbg(dbg_ctl_http_trans, "saw parent retry unavailable first in trans");
430 if (s->current.unavailable_server_retry_attempts < numParents(s)) {
431 return PARENT_RETRY_UNAVAILABLE_SERVER;
432 }
433 return PARENT_RETRY_NONE;
434 }
435 return PARENT_RETRY_NONE;
436}
437
438inline static void
439simple_or_unavailable_server_retry(HttpTransact::State *s)

Callers 1

Calls 7

retry_typeFunction · 0.85
max_retriesFunction · 0.85
numParentsFunction · 0.85
getMappingMethod · 0.80
responseIsRetryableMethod · 0.80
response_is_retryableMethod · 0.80
retry_typeMethod · 0.80

Tested by

no test coverage detected