NCBI C++ ToolKit
|
#include "task_server_pch.hpp"
#include <corelib/request_ctx.hpp>
#include <corelib/ncbireg.hpp>
#include "sockets_man.hpp"
#include "threads_man.hpp"
#include "srv_stat.hpp"
Go to the source code of this file.
Go to the SVN repository for this file.
Classes | |
struct | SSocketsData |
Per-thread structure containing information about sockets. More... | |
struct | SListenSockInfo |
class | CSrvListener |
Macros | |
#define | EPOLLIN 0x0001 |
#define | EPOLLOUT 0x0004 |
#define | EPOLLERR 0x0008 |
#define | EPOLLHUP 0x0010 |
#define | EPOLLRDHUP 0x2000 |
#define | LOG_WITH_ERRNO(sev, msg, x_errno) |
#define | LOG_SOCK_ERROR(sev, fd, prefix) s_LogSocketError(CSrvDiagMsg::sev, fd, prefix, __FILE__, __LINE__, NCBI_CURRENT_FUNCTION) |
Typedefs | |
typedef intr::list< CSrvSocketTask, intr::base_hook< TSrvSockListHook >, intr::constant_time_size< false > > | TSockList |
#define EPOLLERR 0x0008 |
Definition at line 63 of file sockets_man.cpp.
#define EPOLLHUP 0x0010 |
Definition at line 64 of file sockets_man.cpp.
#define EPOLLIN 0x0001 |
Definition at line 61 of file sockets_man.cpp.
#define EPOLLOUT 0x0004 |
Definition at line 62 of file sockets_man.cpp.
#define EPOLLRDHUP 0x2000 |
Definition at line 65 of file sockets_man.cpp.
#define LOG_SOCK_ERROR | ( | sev, | |
fd, | |||
prefix | |||
) | s_LogSocketError(CSrvDiagMsg::sev, fd, prefix, __FILE__, __LINE__, NCBI_CURRENT_FUNCTION) |
Definition at line 422 of file sockets_man.cpp.
#define LOG_WITH_ERRNO | ( | sev, | |
msg, | |||
x_errno | |||
) |
Definition at line 245 of file sockets_man.cpp.
typedef intr::list<CSrvSocketTask, intr::base_hook<TSrvSockListHook>, intr::constant_time_size<false> > TSockList |
Definition at line 95 of file sockets_man.cpp.
void AssignThreadSocks | ( | SSrvThread * | thr | ) |
void CheckConnectsTimeout | ( | SSocketsData * | socks | ) |
Definition at line 784 of file sockets_man.cpp.
References CSrvSocketTask::m_ConnStartJfy, CSrvSocketTask::m_RegError, CSrvSocketTask::m_RegWriteEvts, CSrvSocketTask::m_SeenWriteEvts, NON_CONST_ITERATE, s_ConnTimeout, s_CurJiffies, CSrvTask::SetRunnable(), and SSocketsData::sock_list.
Referenced by s_PerJiffyTasks_Worker().
void CleanSocketList | ( | SSocketsData * | socks | ) |
Definition at line 805 of file sockets_man.cpp.
References ERASE_ITERATE, fTaskNeedTermination, CSrvTask::m_TaskFlags, MarkTaskTerminated(), s_DeleteOldestSockets(), s_SoftSocketLimit, s_TotalSockets, and SSocketsData::sock_list.
Referenced by s_PerJiffyTasks_Worker().
void ConfigureSockets | ( | const CNcbiRegistry * | reg, |
CTempString | section | ||
) |
Definition at line 177 of file sockets_man.cpp.
References IRegistry::GetInt(), kNSecsPerMSec, kUSecsPerMSec, CSrvTime::NSec(), s_AcceptDelay, s_ConnTimeout, s_HardSocketLimit, s_JiffyTime, s_OldSocksDelBatch, s_SocketTimeout, and s_SoftSocketLimit.
Referenced by ReConfig_Sockets(), and s_ReadConfiguration().
void DoSocketWait | ( | void | ) |
Definition at line 623 of file sockets_man.cpp.
References Critical(), i, if(), SSrvSocketInfo::is_listening, kEpollEventsArraySize, LOG_WITH_ERRNO, CSrvTime::NSec(), s_EpollFD, s_JiffyTime, s_RegisterClientEvent(), and s_RegisterListenEvent().
Referenced by RunMainThread().
void FinalizeSocketsMan | ( | void | ) |
Definition at line 679 of file sockets_man.cpp.
References close(), and s_EpollFD.
Referenced by CTaskServer::Finalize().
bool InitSocketsMan | ( | void | ) |
Definition at line 649 of file sockets_man.cpp.
References Critical(), ctll::empty(), CTaskServer::GetHostName(), LOG_WITH_ERRNO, and s_EpollFD.
Referenced by CTaskServer::Initialize().
void MoveAllSockets | ( | SSocketsData * | dst_socks, |
SSocketsData * | src_socks | ||
) |
Definition at line 768 of file sockets_man.cpp.
References SSocketsData::sock_cnt, and SSocketsData::sock_list.
Referenced by s_PerJiffyTasks_Worker().
void PromoteSockAmount | ( | SSocketsData * | socks | ) |
Definition at line 777 of file sockets_man.cpp.
References AtomicAdd(), s_AllSocketsCount, and SSocketsData::sock_cnt.
Referenced by s_PerJiffyTasks_Worker().
bool ReConfig_Sockets | ( | const CTempString & | section, |
const CNcbiRegistry & | new_reg, | ||
string & | err_message | ||
) |
Definition at line 190 of file sockets_man.cpp.
References ConfigureSockets().
Referenced by CTaskServer::ReConfig().
void ReleaseThreadSocks | ( | SSrvThread * | thr | ) |
Definition at line 215 of file sockets_man.cpp.
Referenced by s_StopCurMgrThread().
void RequestStopListening | ( | void | ) |
Definition at line 840 of file sockets_man.cpp.
References s_Listener, and CSrvTask::SetRunnable().
Referenced by TrackShuttingDown().
|
static |
Definition at line 457 of file sockets_man.cpp.
References ctx, GetCurThread(), CSrvTask::GetDiagCtx(), kUSecsPerSecond, CSrvSocketTask::m_Fd, CSrvSocketTask::m_ReadBytes, CSrvSocketTask::m_WrittenBytes, CSrvTask::ReleaseDiagCtx(), CSrvStat::SockClose(), SSrvThread::stat, CSrvDiagMsg::StopRequest(), and thr.
Referenced by CSrvSocketTask::x_CloseSocket().
Definition at line 426 of file sockets_man.cpp.
References AtomicSub(), close(), Critical(), lgr(), LOG_WITH_ERRNO, s_TotalSockets, and val.
Referenced by CSrvSocketTask::Connect(), CSrvListener::ExecuteSlice(), s_ProcessListenError(), s_ProcessListenEvent(), CSrvSocketTask::x_CloseSocket(), and CSrvSocketTask::~CSrvSocketTask().
Definition at line 919 of file sockets_man.cpp.
References buf, memmove, ncbi::grid::netcache::search::fields::size, and SRV_FATAL.
Referenced by CSrvSocketTask::ReadToBuf(), and s_CompactWrBuffer().
|
inlinestatic |
Definition at line 987 of file sockets_man.cpp.
References CSrvSocketTask::m_WrBuf, CSrvSocketTask::m_WrPos, CSrvSocketTask::m_WrSize, and s_CompactBuffer().
Referenced by CSrvSocketTask::Flush(), CSrvSocketTask::InternalRunSlice(), s_DoDataProxy(), and CSrvSocketTask::Write().
|
inlinestatic |
Definition at line 956 of file sockets_man.cpp.
References buf, CSrvSocketTask::m_WrBuf, CSrvSocketTask::m_WrSize, and ncbi::grid::netcache::search::fields::size.
Referenced by s_WriteNoPending(), CSrvSocketTask::Write(), and CSrvSocketTask::WriteData().
|
static |
Definition at line 540 of file sockets_man.cpp.
References CSrvTask::CreateNewDiagCtx(), CSrvTask::GetDiagCtx(), CRequestContext::GetRequestID(), CTaskServer::IPToString(), CSrvSocketTask::m_ConnReqId, CSrvSocketTask::m_ReadBytes, CSrvSocketTask::m_WrittenBytes, CSrvDiagMsg::PrintParam(), CRequestContext::SetClientIP(), CSrvDiagMsg::StartRequest(), and NStr::UInt8ToString().
Referenced by CSrvSocketTask::Connect(), and s_ProcessListenEvent().
Definition at line 314 of file sockets_man.cpp.
References AtomicAdd(), close(), Critical(), EPOLLIN, Error(), SListenSockInfo::fd, INADDR_ANY, LOG_WITH_ERRNO, NStr::NumericToString(), SListenSockInfo::port, s_EpollFD, s_ListenSocks, s_SetSocketNonBlock(), s_TotalSockets, and rapidjson::value.
Referenced by CTaskServer::AddListeningPort(), s_ProcessListenError(), s_ProcessListenEvent(), and s_StartListening().
void s_DeleteOldestSockets | ( | TSockList & | lst | ) |
Definition at line 702 of file sockets_man.cpp.
References CSrvTime::CurSecs(), i, CSrvTask::m_LastActive, CSrvSocketTask::m_NeedToClose, memmove, NON_CONST_ITERATE, s_OldSocksDelBatch, s_SocketTimeout, and CSrvTask::SetRunnable().
Referenced by CleanSocketList().
|
static |
Definition at line 993 of file sockets_man.cpp.
References _ASSERT, kSockMinWriteSize, kSockReadBufSize, CSrvSocketTask::m_ProxyDst, CSrvSocketTask::m_ProxyHadError, CSrvSocketTask::m_ProxySize, CSrvSocketTask::m_ProxySrc, CSrvSocketTask::m_RdBuf, CSrvSocketTask::m_RdPos, CSrvSocketTask::m_RdSize, CSrvSocketTask::m_WrBuf, CSrvSocketTask::m_WrMemSize, CSrvSocketTask::m_WrSize, CSrvSocketTask::NeedEarlyClose(), NULL, CSrvSocketTask::ReadToBuf(), s_CompactWrBuffer(), s_FlushData(), s_ReadFromSocket(), CSrvTask::SetRunnable(), ncbi::grid::netcache::search::fields::size, and CSrvSocketTask::Write().
Referenced by CSrvSocketTask::InternalRunSlice(), and CSrvSocketTask::StartProxyTo().
|
inlinestatic |
Definition at line 975 of file sockets_man.cpp.
References CSrvSocketTask::m_WrBuf, CSrvSocketTask::m_WrPos, CSrvSocketTask::m_WrSize, s_WriteToSocket(), and SRV_FATAL.
Referenced by CSrvSocketTask::Flush(), CSrvSocketTask::InternalRunSlice(), s_DoDataProxy(), and CSrvSocketTask::Write().
|
static |
Definition at line 404 of file sockets_man.cpp.
References file, s_LogWithErrno(), and x_size().
|
static |
Definition at line 235 of file sockets_man.cpp.
References file, s_LogWithErrStr(), and strerror().
Referenced by s_LogSocketError().
|
static |
Definition at line 219 of file sockets_man.cpp.
References CSrvStat::ErrorOnSocket(), file, GetCurThread(), CSrvDiagMsg::IsSeverityVisible(), CSrvDiagMsg::StartSrvLog(), and SSrvThread::stat.
Referenced by s_LogWithErrno().
Definition at line 558 of file sockets_man.cpp.
References Critical(), SListenSockInfo::fd, LOG_SOCK_ERROR, CSrvListener::m_SeenErrors, s_CloseSocket(), s_CreateListeningSocket(), s_Listener, s_ListenErrors, and s_ListenSocks.
Referenced by CSrvListener::ExecuteSlice().
|
static |
Definition at line 570 of file sockets_man.cpp.
References CSrvTime::AsUSec(), AtomicAdd(), CSrvSocketFactory::CreateSocketTask(), Critical(), CSrvTime::Current(), Error(), SListenSockInfo::factory, SListenSockInfo::fd, len, LOG_WITH_ERRNO, CSrvSocketTask::m_Fd, CSrvSocketTask::m_PeerAddr, CSrvSocketTask::m_PeerPort, CSrvListener::m_SeenEvents, s_AcceptDelay, s_CloseSocket(), s_CreateDiagRequest(), s_CreateListeningSocket(), s_HardSocketLimit, s_Listener, s_ListenEvents, s_ListenSocks, s_SetSocketNonBlock(), s_SetSocketOptions(), s_Threads, s_TotalSockets, CSrvStat::SockOpenPassive(), SRV_LOG, CSrvSocketTask::StartProcessing(), SSrvThread::stat, CSrvSocketTask::Terminate(), and Warning().
Referenced by CSrvListener::ExecuteSlice().
|
inlinestatic |
Definition at line 945 of file sockets_man.cpp.
References CSrvSocketTask::m_RdBuf, CSrvSocketTask::m_RdPos, CSrvSocketTask::m_RdSize, and ncbi::grid::netcache::search::fields::size.
Referenced by CSrvSocketTask::Read().
|
static |
Definition at line 846 of file sockets_man.cpp.
References buf, LOG_WITH_ERRNO, CSrvSocketTask::m_Fd, CSrvSocketTask::m_ReadBytes, CSrvSocketTask::m_RegError, CSrvSocketTask::m_RegReadEvts, CSrvSocketTask::m_RegReadHup, CSrvSocketTask::m_SeenReadEvts, CSrvSocketTask::m_SockCanReadMore, CSrvSocketTask::m_SockHasRead, ncbi::grid::netcache::search::fields::size, and Warning().
Referenced by CSrvSocketTask::Read(), CSrvSocketTask::ReadToBuf(), and s_DoDataProxy().
|
inlinestatic |
Definition at line 933 of file sockets_man.cpp.
References CSrvSocketTask::m_CRMet, CSrvSocketTask::m_RdBuf, CSrvSocketTask::m_RdPos, and CSrvSocketTask::m_RdSize.
Referenced by CSrvSocketTask::ReadLine(), and CSrvSocketTask::ReadToBuf().
|
inlinestatic |
Definition at line 390 of file sockets_man.cpp.
References EPOLLERR, EPOLLHUP, EPOLLIN, EPOLLOUT, EPOLLRDHUP, CSrvSocketTask::m_RegError, CSrvSocketTask::m_RegReadEvts, CSrvSocketTask::m_RegReadHup, CSrvSocketTask::m_RegWriteEvts, CSrvSocketTask::m_SeenReadEvts, CSrvSocketTask::m_SeenWriteEvts, and CSrvTask::SetRunnable().
Referenced by DoSocketWait().
|
inlinestatic |
Definition at line 380 of file sockets_man.cpp.
References EPOLLERR, EPOLLHUP, EPOLLIN, SListenSockInfo::index, s_Listener, s_ListenErrors, s_ListenEvents, and CSrvTask::SetRunnable().
Referenced by DoSocketWait().
|
static |
Definition at line 687 of file sockets_man.cpp.
References CSrvTime::CurSecs(), GetCurThread(), CSrvTask::m_LastActive, SSocketsData::sock_cnt, SSocketsData::sock_list, and thr.
Referenced by CSrvSocketTask::StartProcessing().
Definition at line 271 of file sockets_man.cpp.
References Critical(), and LOG_WITH_ERRNO.
Referenced by CSrvSocketTask::Connect(), s_CreateListeningSocket(), and s_ProcessListenEvent().
Definition at line 284 of file sockets_man.cpp.
References Critical(), LOG_WITH_ERRNO, and rapidjson::value.
Referenced by CSrvSocketTask::Connect(), and s_ProcessListenEvent().
Definition at line 303 of file sockets_man.cpp.
References Critical(), LOG_WITH_ERRNO, and rapidjson::value.
Referenced by CSrvSocketTask::InternalRunSlice().
Definition at line 370 of file sockets_man.cpp.
References i, s_CntListeningSocks, and s_CreateListeningSocket().
Referenced by StartSocketsMan().
|
inlinestatic |
Definition at line 963 of file sockets_man.cpp.
References buf, kSockMinWriteSize, s_CopyData(), s_WriteToSocket(), and ncbi::grid::netcache::search::fields::size.
Referenced by CSrvSocketTask::Write().
|
static |
Definition at line 885 of file sockets_man.cpp.
References buf, LOG_WITH_ERRNO, CSrvSocketTask::m_Fd, CSrvSocketTask::m_RegError, CSrvSocketTask::m_RegWriteEvts, CSrvSocketTask::m_SeenWriteEvts, CSrvSocketTask::m_SockCanWrite, CSrvSocketTask::m_WrittenBytes, ncbi::grid::netcache::search::fields::size, and Warning().
Referenced by s_FlushData(), s_WriteNoPending(), and CSrvSocketTask::Write().
void SetAllSocksRunnable | ( | SSocketsData * | socks | ) |
Definition at line 827 of file sockets_man.cpp.
References NON_CONST_ITERATE, and SSocketsData::sock_list.
Referenced by s_PerJiffyTasks_Worker().
bool StartSocketsMan | ( | void | ) |
Definition at line 667 of file sockets_man.cpp.
References Critical(), s_CntListeningSocks, s_StartListening(), and SRV_LOG.
Referenced by CTaskServer::Run().
void WriteSetup_Sockets | ( | CSrvSocketTask & | task | ) |
Definition at line 196 of file sockets_man.cpp.
References kNSecsPerMSec, kUSecsPerMSec, CSrvTime::NSec(), s_AcceptDelay, s_ConnTimeout, s_HardSocketLimit, s_JiffyTime, s_OldSocksDelBatch, s_SocketTimeout, s_SoftSocketLimit, CSrvSocketTask::WriteNumber(), and CSrvSocketTask::WriteText().
Referenced by CTaskServer::WriteSetup().
Definition at line 72 of file sockets_man.cpp.
Referenced by DoSocketWait().
16 Uint4s on x86_64 is the size of CPU's cacheline.
And it should be more than enough for NetCache.
Definition at line 82 of file sockets_man.cpp.
Referenced by CTaskServer::AddListeningPort().
Definition at line 76 of file sockets_man.cpp.
Referenced by s_DoDataProxy(), s_WriteNoPending(), and CSrvSocketTask::Write().
1000 below is chosen to be a little bit less than maximum packet size in Ethernet (~1500 bytes).
Definition at line 75 of file sockets_man.cpp.
Referenced by CSrvSocketTask::CSrvSocketTask(), CSrvSocketTask::Read(), CSrvSocketTask::ReadLine(), CSrvSocketTask::ReadToBuf(), and s_DoDataProxy().
In calculations in the file it's assumed that kSockWriteBufSize is at least twice as large as kSockMinWriteSize.
Definition at line 79 of file sockets_man.cpp.
Referenced by CSrvSocketTask::CSrvSocketTask(), and CSrvSocketTask::Write().
|
static |
Definition at line 166 of file sockets_man.cpp.
Referenced by ConfigureSockets(), s_ProcessListenEvent(), and WriteSetup_Sockets().
int s_AllSocketsCount = 0 |
Definition at line 159 of file sockets_man.cpp.
Referenced by PromoteSockAmount().
|
static |
Definition at line 152 of file sockets_man.cpp.
Referenced by CTaskServer::AddListeningPort(), CSrvListener::ExecuteSlice(), s_StartListening(), and StartSocketsMan().
|
static |
Definition at line 164 of file sockets_man.cpp.
Referenced by CheckConnectsTimeout(), ConfigureSockets(), CSrvSocketTask::InternalRunSlice(), and WriteSetup_Sockets().
|
extern |
Definition at line 53 of file time_man.cpp.
Referenced by CheckConnectsTimeout(), CSrvSocketTask::Connect(), and CSrvSocketTask::InternalRunSlice().
|
static |
Definition at line 157 of file sockets_man.cpp.
Referenced by DoSocketWait(), FinalizeSocketsMan(), InitSocketsMan(), s_CreateListeningSocket(), and CSrvSocketTask::StartProcessing().
int s_HardSocketLimit = 0 |
Definition at line 161 of file sockets_man.cpp.
Referenced by ConfigureSockets(), CSrvStat::PrintToSocket(), s_ProcessListenEvent(), and WriteSetup_Sockets().
|
static |
Definition at line 165 of file sockets_man.cpp.
Referenced by CTaskServer::GetHostName().
|
extern |
Definition at line 54 of file time_man.cpp.
Referenced by ConfigureSockets(), DoSocketWait(), and WriteSetup_Sockets().
|
static |
Definition at line 156 of file sockets_man.cpp.
Referenced by RequestStopListening(), s_ProcessListenError(), s_ProcessListenEvent(), and s_RegisterListenEvent().
|
static |
Definition at line 155 of file sockets_man.cpp.
Referenced by CSrvListener::ExecuteSlice(), s_ProcessListenError(), and s_RegisterListenEvent().
|
static |
Definition at line 154 of file sockets_man.cpp.
Referenced by CSrvListener::ExecuteSlice(), s_ProcessListenEvent(), and s_RegisterListenEvent().
|
static |
Definition at line 151 of file sockets_man.cpp.
Referenced by CTaskServer::AddListeningPort(), CSrvListener::ExecuteSlice(), s_CreateListeningSocket(), s_ProcessListenError(), and s_ProcessListenEvent().
|
static |
Definition at line 153 of file sockets_man.cpp.
Referenced by CTaskServer::AddListeningPort().
|
static |
Definition at line 163 of file sockets_man.cpp.
Referenced by ConfigureSockets(), s_DeleteOldestSockets(), and WriteSetup_Sockets().
|
static |
Definition at line 162 of file sockets_man.cpp.
Referenced by ConfigureSockets(), s_DeleteOldestSockets(), and WriteSetup_Sockets().
int s_SoftSocketLimit = 0 |
Definition at line 160 of file sockets_man.cpp.
Referenced by CleanSocketList(), ConfigureSockets(), CSrvStat::PrintToSocket(), and WriteSetup_Sockets().
|
extern |
Definition at line 59 of file threads_man.cpp.
Referenced by s_ProcessListenEvent().
int s_TotalSockets = 0 |
Definition at line 158 of file sockets_man.cpp.
Referenced by CleanSocketList(), CSrvSocketTask::Connect(), s_CloseSocket(), s_CreateListeningSocket(), s_ProcessListenEvent(), and s_SaveState().