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

Method release_server_session

src/proxy/http/HttpSM.cc:5957–6008  ·  view source on GitHub ↗

void HttpSM::release_server_session() Called when we are not tunneling a response from the server. If the session is keep alive, release it back to the shared pool, otherwise close it

Source from the content-addressed store, hash-verified

5955// shared pool, otherwise close it
5956//
5957void
5958HttpSM::release_server_session(bool serve_from_cache)
5959{
5960 if (server_txn == nullptr) {
5961 return;
5962 }
5963
5964 if (TS_SERVER_SESSION_SHARING_MATCH_NONE != t_state.txn_conf->server_session_sharing_match && t_state.current.server != nullptr &&
5965 t_state.current.server->keep_alive == HTTP_KEEPALIVE && t_state.hdr_info.server_response.valid() &&
5966 t_state.hdr_info.server_request.valid() &&
5967 (t_state.hdr_info.server_response.status_get() == HTTP_STATUS_NOT_MODIFIED ||
5968 (t_state.hdr_info.server_request.method_get_wksidx() == HTTP_WKSIDX_HEAD &&
5969 t_state.www_auth_content != HttpTransact::CACHE_AUTH_NONE)) &&
5970 plugin_tunnel_type == HTTP_NO_PLUGIN_TUNNEL && (!server_entry || !server_entry->eos)) {
5971 if (t_state.www_auth_content == HttpTransact::CACHE_AUTH_NONE || serve_from_cache == false) {
5972 // Must explicitly set the keep_alive_no_activity time before doing the release
5973 server_txn->set_inactivity_timeout(HRTIME_SECONDS(t_state.txn_conf->keep_alive_no_activity_timeout_out));
5974 server_txn->release();
5975 } else {
5976 // an authenticated server connection - attach to the local client
5977 // we are serving from cache for the current transaction
5978 t_state.www_auth_content = HttpTransact::CACHE_AUTH_SERVE;
5979 _ua.get_txn()->attach_server_session(static_cast<PoolableSession *>(server_txn->get_proxy_ssn()), false);
5980 }
5981 } else {
5982 server_txn->do_io_close();
5983 if (TS_SERVER_SESSION_SHARING_MATCH_NONE == t_state.txn_conf->server_session_sharing_match) {
5984 Metrics::Counter::increment(http_rsb.origin_shutdown_release_no_sharing);
5985 } else if (t_state.current.server == nullptr) {
5986 Metrics::Counter::increment(http_rsb.origin_shutdown_release_no_server);
5987 } else if (t_state.current.server->keep_alive != HTTP_KEEPALIVE) {
5988 Metrics::Counter::increment(http_rsb.origin_shutdown_release_no_keep_alive);
5989 } else if (!t_state.hdr_info.server_response.valid()) {
5990 Metrics::Counter::increment(http_rsb.origin_shutdown_release_invalid_response);
5991 } else if (!t_state.hdr_info.server_request.valid()) {
5992 Metrics::Counter::increment(http_rsb.origin_shutdown_release_invalid_request);
5993 } else if (t_state.hdr_info.server_response.status_get() != HTTP_STATUS_NOT_MODIFIED &&
5994 (t_state.hdr_info.server_request.method_get_wksidx() != HTTP_WKSIDX_HEAD ||
5995 t_state.www_auth_content == HttpTransact::CACHE_AUTH_NONE)) {
5996 Metrics::Counter::increment(http_rsb.origin_shutdown_release_modified);
5997 } else {
5998 Metrics::Counter::increment(http_rsb.origin_shutdown_release_misc);
5999 }
6000 }
6001
6002 if (server_entry) {
6003 server_entry->vc = nullptr;
6004 server_entry->read_vio = nullptr;
6005 server_entry->write_vio = nullptr;
6006 server_entry = nullptr;
6007 }
6008}
6009
6010// void HttpSM::handle_post_failure()
6011//

Callers

nothing calls this directly

Calls 10

incrementFunction · 0.85
method_get_wksidxMethod · 0.80
get_txnMethod · 0.80
get_proxy_ssnMethod · 0.80
validMethod · 0.45
status_getMethod · 0.45
releaseMethod · 0.45
attach_server_sessionMethod · 0.45
do_io_closeMethod · 0.45

Tested by

no test coverage detected