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
| 5955 | // shared pool, otherwise close it |
| 5956 | // |
| 5957 | void |
| 5958 | HttpSM::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 | // |
nothing calls this directly
no test coverage detected