1
0
Fork 0

catch 'too many statistics' overflow

This commit is contained in:
Frank Celler 2014-10-22 10:18:26 +02:00
parent c779457125
commit a06e44956b
2 changed files with 40 additions and 32 deletions

View File

@ -64,7 +64,7 @@ namespace triagens {
#ifdef TRI_ENABLE_FIGURES #ifdef TRI_ENABLE_FIGURES
StatisticsAgent () StatisticsAgent ()
: _statistics(0) { : _statistics(nullptr) {
} }
#else #else
@ -81,7 +81,7 @@ namespace triagens {
#ifdef TRI_ENABLE_FIGURES #ifdef TRI_ENABLE_FIGURES
~StatisticsAgent () { ~StatisticsAgent () {
if (_statistics != 0) { if (_statistics != nullptr) {
FUNC::release(_statistics); FUNC::release(_statistics);
} }
} }
@ -101,7 +101,7 @@ namespace triagens {
STAT* acquire () { STAT* acquire () {
#ifdef TRI_ENABLE_FIGURES #ifdef TRI_ENABLE_FIGURES
if (_statistics != 0) { if (_statistics != nullptr) {
return _statistics; return _statistics;
} }
@ -119,7 +119,7 @@ namespace triagens {
void release () { void release () {
#ifdef TRI_ENABLE_FIGURES #ifdef TRI_ENABLE_FIGURES
if (_statistics != 0) { if (_statistics != nullptr) {
FUNC::release(_statistics); FUNC::release(_statistics);
_statistics = 0; _statistics = 0;
} }
@ -186,7 +186,7 @@ namespace triagens {
virtual void replace (STAT* statistics) { virtual void replace (STAT* statistics) {
#ifdef TRI_ENABLE_FIGURES #ifdef TRI_ENABLE_FIGURES
if (_statistics != 0) { if (_statistics != nullptr) {
FUNC::release(_statistics); FUNC::release(_statistics);
} }
@ -236,7 +236,7 @@ namespace triagens {
#define RequestStatisticsAgentSetRequestType(a,b) \ #define RequestStatisticsAgentSetRequestType(a,b) \
do { \ do { \
if (TRI_ENABLE_STATISTICS) { \ if (TRI_ENABLE_STATISTICS) { \
if ((a)->RequestStatisticsAgent::_statistics != 0) { \ if ((a)->RequestStatisticsAgent::_statistics != nullptr) { \
(a)->RequestStatisticsAgent::_statistics->_requestType = b; \ (a)->RequestStatisticsAgent::_statistics->_requestType = b; \
} \ } \
} \ } \
@ -258,7 +258,7 @@ namespace triagens {
#define RequestStatisticsAgentSetAsync(a) \ #define RequestStatisticsAgentSetAsync(a) \
do { \ do { \
if (TRI_ENABLE_STATISTICS) { \ if (TRI_ENABLE_STATISTICS) { \
if ((a)->RequestStatisticsAgent::_statistics != 0) { \ if ((a)->RequestStatisticsAgent::_statistics != nullptr) { \
(a)->RequestStatisticsAgent::_statistics->_async = true; \ (a)->RequestStatisticsAgent::_statistics->_async = true; \
} \ } \
} \ } \
@ -280,7 +280,7 @@ namespace triagens {
#define RequestStatisticsAgentSetReadStart(a) \ #define RequestStatisticsAgentSetReadStart(a) \
do { \ do { \
if (TRI_ENABLE_STATISTICS) { \ if (TRI_ENABLE_STATISTICS) { \
if ((a)->RequestStatisticsAgent::_statistics != 0) { \ if ((a)->RequestStatisticsAgent::_statistics != nullptr) { \
(a)->RequestStatisticsAgent::_statistics->_readStart = TRI_StatisticsTime(); \ (a)->RequestStatisticsAgent::_statistics->_readStart = TRI_StatisticsTime(); \
} \ } \
} \ } \
@ -302,7 +302,7 @@ namespace triagens {
#define RequestStatisticsAgentSetReadEnd(a) \ #define RequestStatisticsAgentSetReadEnd(a) \
do { \ do { \
if (TRI_ENABLE_STATISTICS) { \ if (TRI_ENABLE_STATISTICS) { \
if ((a)->RequestStatisticsAgent::_statistics != 0) { \ if ((a)->RequestStatisticsAgent::_statistics != nullptr) { \
(a)->RequestStatisticsAgent::_statistics->_readEnd = TRI_StatisticsTime(); \ (a)->RequestStatisticsAgent::_statistics->_readEnd = TRI_StatisticsTime(); \
} \ } \
} \ } \
@ -324,7 +324,7 @@ namespace triagens {
#define RequestStatisticsAgentSetWriteStart(a) \ #define RequestStatisticsAgentSetWriteStart(a) \
do { \ do { \
if (TRI_ENABLE_STATISTICS) { \ if (TRI_ENABLE_STATISTICS) { \
if ((a)->RequestStatisticsAgent::_statistics != 0) { \ if ((a)->RequestStatisticsAgent::_statistics != nullptr) { \
(a)->RequestStatisticsAgent::_statistics->_writeStart = TRI_StatisticsTime(); \ (a)->RequestStatisticsAgent::_statistics->_writeStart = TRI_StatisticsTime(); \
} \ } \
} \ } \
@ -346,7 +346,7 @@ namespace triagens {
#define RequestStatisticsAgentSetWriteEnd(a) \ #define RequestStatisticsAgentSetWriteEnd(a) \
do { \ do { \
if (TRI_ENABLE_STATISTICS) { \ if (TRI_ENABLE_STATISTICS) { \
if ((a)->RequestStatisticsAgent::_statistics != 0) { \ if ((a)->RequestStatisticsAgent::_statistics != nullptr) { \
(a)->RequestStatisticsAgent::_statistics->_writeEnd = TRI_StatisticsTime(); \ (a)->RequestStatisticsAgent::_statistics->_writeEnd = TRI_StatisticsTime(); \
} \ } \
} \ } \
@ -368,7 +368,7 @@ namespace triagens {
#define RequestStatisticsAgentSetQueueStart(a) \ #define RequestStatisticsAgentSetQueueStart(a) \
do { \ do { \
if (TRI_ENABLE_STATISTICS) { \ if (TRI_ENABLE_STATISTICS) { \
if ((a)->RequestStatisticsAgent::_statistics != 0) { \ if ((a)->RequestStatisticsAgent::_statistics != nullptr) { \
(a)->RequestStatisticsAgent::_statistics->_queueStart = TRI_StatisticsTime(); \ (a)->RequestStatisticsAgent::_statistics->_queueStart = TRI_StatisticsTime(); \
} \ } \
} \ } \
@ -390,7 +390,7 @@ namespace triagens {
#define RequestStatisticsAgentSetQueueEnd(a) \ #define RequestStatisticsAgentSetQueueEnd(a) \
do { \ do { \
if (TRI_ENABLE_STATISTICS) { \ if (TRI_ENABLE_STATISTICS) { \
if ((a)->RequestStatisticsAgent::_statistics != 0) { \ if ((a)->RequestStatisticsAgent::_statistics != nullptr) { \
(a)->RequestStatisticsAgent::_statistics->_queueEnd = TRI_StatisticsTime(); \ (a)->RequestStatisticsAgent::_statistics->_queueEnd = TRI_StatisticsTime(); \
} \ } \
} \ } \
@ -412,7 +412,7 @@ namespace triagens {
#define RequestStatisticsAgentSetRequestStart(a) \ #define RequestStatisticsAgentSetRequestStart(a) \
do { \ do { \
if (TRI_ENABLE_STATISTICS) { \ if (TRI_ENABLE_STATISTICS) { \
if ((a)->RequestStatisticsAgent::_statistics != 0) { \ if ((a)->RequestStatisticsAgent::_statistics != nullptr) { \
(a)->RequestStatisticsAgent::_statistics->_requestStart = TRI_StatisticsTime(); \ (a)->RequestStatisticsAgent::_statistics->_requestStart = TRI_StatisticsTime(); \
} \ } \
} \ } \
@ -434,7 +434,7 @@ namespace triagens {
#define RequestStatisticsAgentSetRequestEnd(a) \ #define RequestStatisticsAgentSetRequestEnd(a) \
do { \ do { \
if (TRI_ENABLE_STATISTICS) { \ if (TRI_ENABLE_STATISTICS) { \
if ((a)->RequestStatisticsAgent::_statistics != 0) { \ if ((a)->RequestStatisticsAgent::_statistics != nullptr) { \
(a)->RequestStatisticsAgent::_statistics->_requestEnd = TRI_StatisticsTime(); \ (a)->RequestStatisticsAgent::_statistics->_requestEnd = TRI_StatisticsTime(); \
} \ } \
} \ } \
@ -456,7 +456,7 @@ namespace triagens {
#define RequestStatisticsAgentSetExecuteError(a) \ #define RequestStatisticsAgentSetExecuteError(a) \
do { \ do { \
if (TRI_ENABLE_STATISTICS) { \ if (TRI_ENABLE_STATISTICS) { \
if ((a)->RequestStatisticsAgent::_statistics != 0) { \ if ((a)->RequestStatisticsAgent::_statistics != nullptr) { \
(a)->RequestStatisticsAgent::_statistics->_executeError = true; \ (a)->RequestStatisticsAgent::_statistics->_executeError = true; \
} \ } \
} \ } \
@ -478,7 +478,7 @@ namespace triagens {
#define RequestStatisticsAgentSetIgnore(a) \ #define RequestStatisticsAgentSetIgnore(a) \
do { \ do { \
if (TRI_ENABLE_STATISTICS) { \ if (TRI_ENABLE_STATISTICS) { \
if ((a)->RequestStatisticsAgent::_statistics != 0) { \ if ((a)->RequestStatisticsAgent::_statistics != nullptr) { \
(a)->RequestStatisticsAgent::_statistics->_ignore = true; \ (a)->RequestStatisticsAgent::_statistics->_ignore = true; \
} \ } \
} \ } \
@ -500,7 +500,7 @@ namespace triagens {
#define RequestStatisticsAgentAddReceivedBytes(a,b) \ #define RequestStatisticsAgentAddReceivedBytes(a,b) \
do { \ do { \
if (TRI_ENABLE_STATISTICS) { \ if (TRI_ENABLE_STATISTICS) { \
if ((a)->RequestStatisticsAgent::_statistics != 0) { \ if ((a)->RequestStatisticsAgent::_statistics != nullptr) { \
(a)->RequestStatisticsAgent::_statistics->_receivedBytes += (b); \ (a)->RequestStatisticsAgent::_statistics->_receivedBytes += (b); \
} \ } \
} \ } \
@ -522,7 +522,7 @@ namespace triagens {
#define RequestStatisticsAgentAddSentBytes(a,b) \ #define RequestStatisticsAgentAddSentBytes(a,b) \
do { \ do { \
if (TRI_ENABLE_STATISTICS) { \ if (TRI_ENABLE_STATISTICS) { \
if ((a)->RequestStatisticsAgent::_statistics != 0) { \ if ((a)->RequestStatisticsAgent::_statistics != nullptr) { \
(a)->RequestStatisticsAgent::_statistics->_sentBytes += (b); \ (a)->RequestStatisticsAgent::_statistics->_sentBytes += (b); \
} \ } \
} \ } \
@ -573,7 +573,7 @@ namespace triagens {
#define ConnectionStatisticsAgentSetHttp(a) \ #define ConnectionStatisticsAgentSetHttp(a) \
do { \ do { \
if (TRI_ENABLE_STATISTICS) { \ if (TRI_ENABLE_STATISTICS) { \
if ((a)->ConnectionStatisticsAgent::_statistics != 0) { \ if ((a)->ConnectionStatisticsAgent::_statistics != nullptr) { \
(a)->ConnectionStatisticsAgent::_statistics->_http = true; \ (a)->ConnectionStatisticsAgent::_statistics->_http = true; \
} \ } \
} \ } \
@ -595,7 +595,7 @@ namespace triagens {
#define ConnectionStatisticsAgentSetStart(a) \ #define ConnectionStatisticsAgentSetStart(a) \
do { \ do { \
if (TRI_ENABLE_STATISTICS) { \ if (TRI_ENABLE_STATISTICS) { \
if ((a)->ConnectionStatisticsAgent::_statistics != 0) { \ if ((a)->ConnectionStatisticsAgent::_statistics != nullptr) { \
(a)->ConnectionStatisticsAgent::_statistics->_connStart = TRI_StatisticsTime(); \ (a)->ConnectionStatisticsAgent::_statistics->_connStart = TRI_StatisticsTime(); \
} \ } \
} \ } \
@ -617,7 +617,7 @@ namespace triagens {
#define ConnectionStatisticsAgentSetEnd(a) \ #define ConnectionStatisticsAgentSetEnd(a) \
do { \ do { \
if (TRI_ENABLE_STATISTICS) { \ if (TRI_ENABLE_STATISTICS) { \
if ((a)->ConnectionStatisticsAgent::_statistics != 0) { \ if ((a)->ConnectionStatisticsAgent::_statistics != nullptr) { \
(a)->ConnectionStatisticsAgent::_statistics->_connEnd = TRI_StatisticsTime(); \ (a)->ConnectionStatisticsAgent::_statistics->_connEnd = TRI_StatisticsTime(); \
} \ } \
} \ } \

View File

@ -78,11 +78,11 @@ static TRI_statistics_list_t RequestFreeList;
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
TRI_request_statistics_t* TRI_AcquireRequestStatistics () { TRI_request_statistics_t* TRI_AcquireRequestStatistics () {
TRI_request_statistics_t* statistics = NULL; TRI_request_statistics_t* statistics = nullptr;
STATISTICS_LOCK(&RequestListLock); STATISTICS_LOCK(&RequestListLock);
if (RequestFreeList._first != NULL) { if (RequestFreeList._first != nullptr) {
statistics = (TRI_request_statistics_t*) RequestFreeList._first; statistics = (TRI_request_statistics_t*) RequestFreeList._first;
RequestFreeList._first = RequestFreeList._first->_next; RequestFreeList._first = RequestFreeList._first->_next;
} }
@ -99,6 +99,10 @@ TRI_request_statistics_t* TRI_AcquireRequestStatistics () {
void TRI_ReleaseRequestStatistics (TRI_request_statistics_t* statistics) { void TRI_ReleaseRequestStatistics (TRI_request_statistics_t* statistics) {
STATISTICS_LOCK(&RequestListLock); STATISTICS_LOCK(&RequestListLock);
if (statistics == nullptr) {
return;
}
if (! statistics->_ignore) { if (! statistics->_ignore) {
TRI_TotalRequestsStatistics.incCounter(); TRI_TotalRequestsStatistics.incCounter();
@ -138,7 +142,7 @@ void TRI_ReleaseRequestStatistics (TRI_request_statistics_t* statistics) {
memset(statistics, 0, sizeof(TRI_request_statistics_t)); memset(statistics, 0, sizeof(TRI_request_statistics_t));
statistics->_requestType = triagens::rest::HttpRequest::HTTP_REQUEST_ILLEGAL; statistics->_requestType = triagens::rest::HttpRequest::HTTP_REQUEST_ILLEGAL;
if (RequestFreeList._first == NULL) { if (RequestFreeList._first == nullptr) {
RequestFreeList._first = (TRI_statistics_entry_t*) statistics; RequestFreeList._first = (TRI_statistics_entry_t*) statistics;
RequestFreeList._last = (TRI_statistics_entry_t*) statistics; RequestFreeList._last = (TRI_statistics_entry_t*) statistics;
} }
@ -203,7 +207,7 @@ TRI_connection_statistics_t* TRI_AcquireConnectionStatistics () {
STATISTICS_LOCK(&ConnectionListLock); STATISTICS_LOCK(&ConnectionListLock);
if (ConnectionFreeList._first != NULL) { if (ConnectionFreeList._first != nullptr) {
statistics = (TRI_connection_statistics_t*) ConnectionFreeList._first; statistics = (TRI_connection_statistics_t*) ConnectionFreeList._first;
ConnectionFreeList._first = ConnectionFreeList._first->_next; ConnectionFreeList._first = ConnectionFreeList._first->_next;
} }
@ -220,6 +224,10 @@ TRI_connection_statistics_t* TRI_AcquireConnectionStatistics () {
void TRI_ReleaseConnectionStatistics (TRI_connection_statistics_t* statistics) { void TRI_ReleaseConnectionStatistics (TRI_connection_statistics_t* statistics) {
STATISTICS_LOCK(&ConnectionListLock); STATISTICS_LOCK(&ConnectionListLock);
if (statistics == nullptr) {
return;
}
if (statistics->_http) { if (statistics->_http) {
if (statistics->_connStart != 0) { if (statistics->_connStart != 0) {
if (statistics->_connEnd == 0) { if (statistics->_connEnd == 0) {
@ -237,7 +245,7 @@ void TRI_ReleaseConnectionStatistics (TRI_connection_statistics_t* statistics) {
// clear statistics and put back an the free list // clear statistics and put back an the free list
memset(statistics, 0, sizeof(TRI_connection_statistics_t)); memset(statistics, 0, sizeof(TRI_connection_statistics_t));
if (ConnectionFreeList._first == NULL) { if (ConnectionFreeList._first == nullptr) {
ConnectionFreeList._first = (TRI_statistics_entry_t*) statistics; ConnectionFreeList._first = (TRI_statistics_entry_t*) statistics;
ConnectionFreeList._last = (TRI_statistics_entry_t*) statistics; ConnectionFreeList._last = (TRI_statistics_entry_t*) statistics;
} }
@ -319,13 +327,13 @@ static void FillStatisticsList (TRI_statistics_list_t* list, size_t element, siz
static void DestroyStatisticsList (TRI_statistics_list_t* list) { static void DestroyStatisticsList (TRI_statistics_list_t* list) {
TRI_statistics_entry_t* entry = list->_first; TRI_statistics_entry_t* entry = list->_first;
while (entry != NULL) { while (entry != nullptr) {
TRI_statistics_entry_t* next = entry->_next; TRI_statistics_entry_t* next = entry->_next;
TRI_Free(TRI_CORE_MEM_ZONE, entry); TRI_Free(TRI_CORE_MEM_ZONE, entry);
entry = next; entry = next;
} }
list->_first = list->_last = NULL; list->_first = list->_last = nullptr;
} }
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
@ -343,7 +351,7 @@ static uint64_t GetPhysicalMemory () {
mib[0] = CTL_HW; mib[0] = CTL_HW;
mib[1] = HW_MEMSIZE; mib[1] = HW_MEMSIZE;
length = sizeof(int64_t); length = sizeof(int64_t);
sysctl(mib, 2, &physicalMemory, &length, NULL, 0); sysctl(mib, 2, &physicalMemory, &length, nullptr, 0);
return (uint64_t) physicalMemory; return (uint64_t) physicalMemory;
} }
@ -574,7 +582,7 @@ void TRI_InitialiseStatistics () {
// generate the request statistics queue // generate the request statistics queue
// ............................................................................. // .............................................................................
RequestFreeList._first = RequestFreeList._last = NULL; RequestFreeList._first = RequestFreeList._last = nullptr;
FillStatisticsList(&RequestFreeList, sizeof(TRI_request_statistics_t), QUEUE_SIZE); FillStatisticsList(&RequestFreeList, sizeof(TRI_request_statistics_t), QUEUE_SIZE);
@ -584,7 +592,7 @@ void TRI_InitialiseStatistics () {
// generate the connection statistics queue // generate the connection statistics queue
// ............................................................................. // .............................................................................
ConnectionFreeList._first = ConnectionFreeList._last = NULL; ConnectionFreeList._first = ConnectionFreeList._last = nullptr;
FillStatisticsList(&ConnectionFreeList, sizeof(TRI_connection_statistics_t), QUEUE_SIZE); FillStatisticsList(&ConnectionFreeList, sizeof(TRI_connection_statistics_t), QUEUE_SIZE);