diff options
Diffstat (limited to 'ndb/src/common/debugger/EventLogger.cpp')
-rw-r--r-- | ndb/src/common/debugger/EventLogger.cpp | 861 |
1 files changed, 0 insertions, 861 deletions
diff --git a/ndb/src/common/debugger/EventLogger.cpp b/ndb/src/common/debugger/EventLogger.cpp deleted file mode 100644 index 5a534b36b59..00000000000 --- a/ndb/src/common/debugger/EventLogger.cpp +++ /dev/null @@ -1,861 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include <ndb_global.h> - -#include "EventLogger.hpp" - -#include <NdbConfig.h> -#include <kernel/BlockNumbers.h> -#include <signaldata/ArbitSignalData.hpp> -#include <GrepEvent.hpp> -#include <NodeState.hpp> -#include <version.h> - -// -// PUBLIC -// -EventLoggerBase::~EventLoggerBase() -{ - -} - - -#define QQQQ char *m_text, size_t m_text_len, const Uint32* theData - -void getTextConnected(QQQQ) { - BaseString::snprintf(m_text, m_text_len, - "Node %u Connected", - theData[1]); -} -void getTextConnectedApiVersion(QQQQ) { - BaseString::snprintf(m_text, m_text_len, - "Node %u: API version %d.%d.%d", - theData[1], - getMajor(theData[2]), - getMinor(theData[2]), - getBuild(theData[2])); -} -void getTextDisconnected(QQQQ) { - BaseString::snprintf(m_text, m_text_len, - "Node %u Disconnected", - theData[1]); -} -void getTextCommunicationClosed(QQQQ) { - //----------------------------------------------------------------------- - // REPORT communication to node closed. - //----------------------------------------------------------------------- - BaseString::snprintf(m_text, m_text_len, - "Communication to Node %u closed", - theData[1]); -} -void getTextCommunicationOpened(QQQQ) { - //----------------------------------------------------------------------- - // REPORT communication to node opened. - //----------------------------------------------------------------------- - BaseString::snprintf(m_text, m_text_len, - "Communication to Node %u opened", - theData[1]); -} -void getTextNDBStartStarted(QQQQ) { - //----------------------------------------------------------------------- - // Start of NDB has been initiated. - //----------------------------------------------------------------------- - BaseString::snprintf(m_text, m_text_len, - "Start initiated (version %d.%d.%d)", - getMajor(theData[1]), - getMinor(theData[1]), - getBuild(theData[1])); -} -void getTextNDBStopStarted(QQQQ) { - BaseString::snprintf(m_text, m_text_len, - "%s shutdown initiated", - (theData[1] == 1 ? "Cluster" : "Node")); -} -void getTextNDBStopAborted(QQQQ) { - BaseString::snprintf(m_text, m_text_len, - "Node shutdown aborted"); -} -void getTextNDBStartCompleted(QQQQ) { - //----------------------------------------------------------------------- - // Start of NDB has been completed. - //----------------------------------------------------------------------- - BaseString::snprintf(m_text, m_text_len, - "Started (version %d.%d.%d)", - getMajor(theData[1]), - getMinor(theData[1]), - getBuild(theData[1])); -} -void getTextSTTORRYRecieved(QQQQ) { - //----------------------------------------------------------------------- - // STTORRY recevied after restart finished. - //----------------------------------------------------------------------- - BaseString::snprintf(m_text, m_text_len, - "STTORRY received after restart finished"); -} -void getTextStartPhaseCompleted(QQQQ) { - //----------------------------------------------------------------------- - // REPORT Start phase completed. - //----------------------------------------------------------------------- - const char *type = "<Unknown>"; - switch((NodeState::StartType)theData[2]){ - case NodeState::ST_INITIAL_START: - type = "(initial start)"; - break; - case NodeState::ST_SYSTEM_RESTART: - type = "(system restart)"; - break; - case NodeState::ST_NODE_RESTART: - type = "(node restart)"; - break; - case NodeState::ST_INITIAL_NODE_RESTART: - type = "(initial node restart)"; - break; - case NodeState::ST_ILLEGAL_TYPE: - type = ""; - break; - default: - BaseString::snprintf(m_text, m_text_len, - "Start phase %u completed (unknown = %d)", - theData[1], - theData[2]); - return; - } - BaseString::snprintf(m_text, m_text_len, - "Start phase %u completed %s", - theData[1], - type); -} -void getTextCM_REGCONF(QQQQ) { - BaseString::snprintf(m_text, m_text_len, - "CM_REGCONF president = %u, own Node = %u, our dynamic id = %u", - theData[2], - theData[1], - theData[3]); -} -void getTextCM_REGREF(QQQQ) { - const char* line = ""; - switch (theData[3]) { - case 0: - line = "Busy"; - break; - case 1: - line = "Election with wait = false"; - break; - case 2: - line = "Election with wait = false"; - break; - case 3: - line = "Not president"; - break; - case 4: - line = "Election without selecting new candidate"; - break; - default: - line = "No such cause"; - break; - }//switch - - BaseString::snprintf(m_text, m_text_len, - "CM_REGREF from Node %u to our Node %u. Cause = %s", - theData[2], - theData[1], - line); -} -void getTextFIND_NEIGHBOURS(QQQQ) { - //----------------------------------------------------------------------- - // REPORT Node Restart copied a fragment. - //----------------------------------------------------------------------- - BaseString::snprintf(m_text, m_text_len, - "We are Node %u with dynamic ID %u, our left neighbour " - "is Node %u, our right is Node %u", - theData[1], - theData[4], - theData[2], - theData[3]); -} -void getTextNodeFailCompleted(QQQQ) { - //----------------------------------------------------------------------- - // REPORT Node failure phase completed. - //----------------------------------------------------------------------- - if (theData[1] == 0) - { - if (theData[3] != 0) { - BaseString::snprintf(m_text, m_text_len, - "Node %u completed failure of Node %u", - theData[3], - theData[2]); - } else { - BaseString::snprintf(m_text, m_text_len, - "All nodes completed failure of Node %u", - theData[2]); - }//if - } else { - const char* line = ""; - if (theData[1] == DBTC){ - line = "DBTC"; - }else if (theData[1] == DBDICT){ - line = "DBDICT"; - }else if (theData[1] == DBDIH){ - line = "DBDIH"; - }else if (theData[1] == DBLQH){ - line = "DBLQH"; - } - BaseString::snprintf(m_text, m_text_len, - "Node failure of %u %s completed", - theData[2], - line); - } -} -void getTextNODE_FAILREP(QQQQ) { - BaseString::snprintf(m_text, m_text_len, - "Node %u has failed. The Node state at failure " - "was %u", - theData[1], - theData[2]); -} -void getTextArbitState(QQQQ) { - //----------------------------------------------------------------------- - // REPORT arbitrator found or lost. - //----------------------------------------------------------------------- - { - const ArbitSignalData* sd = (ArbitSignalData*)theData; - char ticketText[ArbitTicket::TextLength + 1]; - char errText[ArbitCode::ErrTextLength + 1]; - const unsigned code = sd->code & 0xFFFF; - const unsigned state = sd->code >> 16; - switch (code) { - case ArbitCode::ThreadStart: - BaseString::snprintf(m_text, m_text_len, - "President restarts arbitration thread [state=%u]", - state); - break; - case ArbitCode::PrepPart2: - sd->ticket.getText(ticketText, sizeof(ticketText)); - BaseString::snprintf(m_text, m_text_len, - "Prepare arbitrator node %u [ticket=%s]", - sd->node, ticketText); - break; - case ArbitCode::PrepAtrun: - sd->ticket.getText(ticketText, sizeof(ticketText)); - BaseString::snprintf(m_text, m_text_len, - "Receive arbitrator node %u [ticket=%s]", - sd->node, ticketText); - break; - case ArbitCode::ApiStart: - sd->ticket.getText(ticketText, sizeof(ticketText)); - BaseString::snprintf(m_text, m_text_len, - "Started arbitrator node %u [ticket=%s]", - sd->node, ticketText); - break; - case ArbitCode::ApiFail: - BaseString::snprintf(m_text, m_text_len, - "Lost arbitrator node %u - process failure [state=%u]", - sd->node, state); - break; - case ArbitCode::ApiExit: - BaseString::snprintf(m_text, m_text_len, - "Lost arbitrator node %u - process exit [state=%u]", - sd->node, state); - break; - default: - ArbitCode::getErrText(code, errText, sizeof(errText)); - BaseString::snprintf(m_text, m_text_len, - "Lost arbitrator node %u - %s [state=%u]", - sd->node, errText, state); - break; - } - } -} - -void getTextArbitResult(QQQQ) { - //----------------------------------------------------------------------- - // REPORT arbitration result (the failures may not reach us). - //----------------------------------------------------------------------- - { - const ArbitSignalData* sd = (ArbitSignalData*)theData; - char errText[ArbitCode::ErrTextLength + 1]; - const unsigned code = sd->code & 0xFFFF; - const unsigned state = sd->code >> 16; - switch (code) { - case ArbitCode::LoseNodes: - BaseString::snprintf(m_text, m_text_len, - "Arbitration check lost - less than 1/2 nodes left"); - break; - case ArbitCode::WinNodes: - BaseString::snprintf(m_text, m_text_len, - "Arbitration check won - all node groups and more than 1/2 nodes left"); - break; - case ArbitCode::WinGroups: - BaseString::snprintf(m_text, m_text_len, - "Arbitration check won - node group majority"); - break; - case ArbitCode::LoseGroups: - BaseString::snprintf(m_text, m_text_len, - "Arbitration check lost - missing node group"); - break; - case ArbitCode::Partitioning: - BaseString::snprintf(m_text, m_text_len, - "Network partitioning - arbitration required"); - break; - case ArbitCode::WinChoose: - BaseString::snprintf(m_text, m_text_len, - "Arbitration won - positive reply from node %u", - sd->node); - break; - case ArbitCode::LoseChoose: - BaseString::snprintf(m_text, m_text_len, - "Arbitration lost - negative reply from node %u", - sd->node); - break; - case ArbitCode::LoseNorun: - BaseString::snprintf(m_text, m_text_len, - "Network partitioning - no arbitrator available"); - break; - case ArbitCode::LoseNocfg: - BaseString::snprintf(m_text, m_text_len, - "Network partitioning - no arbitrator configured"); - break; - default: - ArbitCode::getErrText(code, errText, sizeof(errText)); - BaseString::snprintf(m_text, m_text_len, - "Arbitration failure - %s [state=%u]", - errText, state); - break; - } - } -} -void getTextGlobalCheckpointStarted(QQQQ) { - //----------------------------------------------------------------------- - // This event reports that a global checkpoint has been started and this - // node is the master of this global checkpoint. - //----------------------------------------------------------------------- - BaseString::snprintf(m_text, m_text_len, - "Global checkpoint %u started", - theData[1]); -} -void getTextGlobalCheckpointCompleted(QQQQ) { - //----------------------------------------------------------------------- - // This event reports that a global checkpoint has been completed on this - // node and the node is the master of this global checkpoint. - //----------------------------------------------------------------------- - BaseString::snprintf(m_text, m_text_len, - "Global checkpoint %u completed", - theData[1]); -} -void getTextLocalCheckpointStarted(QQQQ) { - //----------------------------------------------------------------------- - // This event reports that a local checkpoint has been started and this - // node is the master of this local checkpoint. - //----------------------------------------------------------------------- - BaseString::snprintf(m_text, m_text_len, - "Local checkpoint %u started. " - "Keep GCI = %u oldest restorable GCI = %u", - theData[1], - theData[2], - theData[3]); -} -void getTextLocalCheckpointCompleted(QQQQ) { - //----------------------------------------------------------------------- - // This event reports that a local checkpoint has been completed on this - // node and the node is the master of this local checkpoint. - //----------------------------------------------------------------------- - BaseString::snprintf(m_text, m_text_len, - "Local checkpoint %u completed", - theData[1]); -} -void getTextTableCreated(QQQQ) { - //----------------------------------------------------------------------- - // This event reports that a table has been created. - //----------------------------------------------------------------------- - BaseString::snprintf(m_text, m_text_len, - "Table with ID = %u created", - theData[1]); -} -/* STRANGE */ -void getTextLCPStoppedInCalcKeepGci(QQQQ) { - if (theData[1] == 0) - BaseString::snprintf(m_text, m_text_len, - "Local Checkpoint stopped in CALCULATED_KEEP_GCI"); -} -void getTextNR_CopyDict(QQQQ) { - //----------------------------------------------------------------------- - // REPORT Node Restart completed copy of dictionary information. - //----------------------------------------------------------------------- - BaseString::snprintf(m_text, m_text_len, - "Node restart completed copy of dictionary information"); -} -void getTextNR_CopyDistr(QQQQ) { - //----------------------------------------------------------------------- - // REPORT Node Restart completed copy of distribution information. - //----------------------------------------------------------------------- - BaseString::snprintf(m_text, m_text_len, - "Node restart completed copy of distribution information"); -} -void getTextNR_CopyFragsStarted(QQQQ) { - //----------------------------------------------------------------------- - // REPORT Node Restart is starting to copy the fragments. - //----------------------------------------------------------------------- - BaseString::snprintf(m_text, m_text_len, - "Node restart starting to copy the fragments " - "to Node %u", - theData[1]); -} -void getTextNR_CopyFragDone(QQQQ) { - //----------------------------------------------------------------------- - // REPORT Node Restart copied a fragment. - //----------------------------------------------------------------------- - BaseString::snprintf(m_text, m_text_len, - "Table ID = %u, fragment ID = %u have been copied " - "to Node %u", - theData[2], - theData[3], - theData[1]); -} -void getTextNR_CopyFragsCompleted(QQQQ) { - BaseString::snprintf(m_text, m_text_len, - "Node restart completed copying the fragments " - "to Node %u", - theData[1]); -} -void getTextLCPFragmentCompleted(QQQQ) { - BaseString::snprintf(m_text, m_text_len, - "Table ID = %u, fragment ID = %u has completed LCP " - "on Node %u", - theData[2], - theData[3], - theData[1]); -} -void getTextTransReportCounters(QQQQ) { - // ------------------------------------------------------------------- - // Report information about transaction activity once per 10 seconds. - // ------------------------------------------------------------------- - BaseString::snprintf(m_text, m_text_len, - "Trans. Count = %u, Commit Count = %u, " - "Read Count = %u, Simple Read Count = %u,\n" - "Write Count = %u, AttrInfo Count = %u, " - "Concurrent Operations = %u, Abort Count = %u\n" - " Scans: %u Range scans: %u", - theData[1], - theData[2], - theData[3], - theData[4], - theData[5], - theData[6], - theData[7], - theData[8], - theData[9], - theData[10]); -} -void getTextOperationReportCounters(QQQQ) { - BaseString::snprintf(m_text, m_text_len, - "Operations=%u", - theData[1]); -} -void getTextUndoLogBlocked(QQQQ) { - //----------------------------------------------------------------------- - // REPORT Undo Logging blocked due to buffer near to overflow. - //----------------------------------------------------------------------- - BaseString::snprintf(m_text, m_text_len, - "ACC Blocked %u and TUP Blocked %u times last second", - theData[1], - theData[2]); -} -void getTextTransporterError(QQQQ) { - BaseString::snprintf(m_text, m_text_len, - "Transporter to node %d reported error 0x%x", - theData[1], - theData[2]); -} -void getTextTransporterWarning(QQQQ) { - getTextTransporterError(m_text, m_text_len, theData); -} -void getTextMissedHeartbeat(QQQQ) { - //----------------------------------------------------------------------- - // REPORT Undo Logging blocked due to buffer near to overflow. - //----------------------------------------------------------------------- - BaseString::snprintf(m_text, m_text_len, - "Node %d missed heartbeat %d", - theData[1], - theData[2]); -} -void getTextDeadDueToHeartbeat(QQQQ) { - //----------------------------------------------------------------------- - // REPORT Undo Logging blocked due to buffer near to overflow. - //----------------------------------------------------------------------- - BaseString::snprintf(m_text, m_text_len, - "Node %d declared dead due to missed heartbeat", - theData[1]); -} -void getTextJobStatistic(QQQQ) { - BaseString::snprintf(m_text, m_text_len, - "Mean loop Counter in doJob last 8192 times = %u", - theData[1]); -} -void getTextSendBytesStatistic(QQQQ) { - BaseString::snprintf(m_text, m_text_len, - "Mean send size to Node = %d last 4096 sends = %u bytes", - theData[1], - theData[2]); -} -void getTextReceiveBytesStatistic(QQQQ) { - BaseString::snprintf(m_text, m_text_len, - "Mean receive size to Node = %d last 4096 sends = %u bytes", - theData[1], - theData[2]); -} -void getTextSentHeartbeat(QQQQ) { - BaseString::snprintf(m_text, m_text_len, - "Node Sent Heartbeat to node = %d", - theData[1]); -} -void getTextCreateLogBytes(QQQQ) { - BaseString::snprintf(m_text, m_text_len, - "Log part %u, log file %u, MB %u", - theData[1], - theData[2], - theData[3]); -} -void getTextStartLog(QQQQ) { - BaseString::snprintf(m_text, m_text_len, - "Log part %u, start MB %u, stop MB %u, last GCI, log exec %u", - theData[1], - theData[2], - theData[3], - theData[4]); -} -void getTextStartREDOLog(QQQQ) { - BaseString::snprintf(m_text, m_text_len, - "Node: %d StartLog: [GCI Keep: %d LastCompleted: %d NewestRestorable: %d]", - theData[1], - theData[2], - theData[3], - theData[4]); -} -void getTextUNDORecordsExecuted(QQQQ) { - const char* line = ""; - if (theData[1] == DBTUP){ - line = "DBTUP"; - }else if (theData[1] == DBACC){ - line = "DBACC"; - } - - BaseString::snprintf(m_text, m_text_len, - " UNDO %s %d [%d %d %d %d %d %d %d %d %d]", - line, - theData[2], - theData[3], - theData[4], - theData[5], - theData[6], - theData[7], - theData[8], - theData[9], - theData[10], - theData[11]); -} -void getTextInfoEvent(QQQQ) { - BaseString::snprintf(m_text, m_text_len, (char *)&theData[1]); -} -void getTextWarningEvent(QQQQ) { - BaseString::snprintf(m_text, m_text_len, (char *)&theData[1]); -} -void getTextGCP_TakeoverStarted(QQQQ) { - BaseString::snprintf(m_text, m_text_len, "GCP Take over started"); -} -void getTextGCP_TakeoverCompleted(QQQQ) { - BaseString::snprintf(m_text, m_text_len, "GCP Take over completed"); -} -void getTextLCP_TakeoverStarted(QQQQ) { - BaseString::snprintf(m_text, m_text_len, "LCP Take over started"); -} -void getTextLCP_TakeoverCompleted(QQQQ) { - BaseString::snprintf(m_text, m_text_len, - "LCP Take over completed (state = %d)", - theData[1]); -} -void getTextMemoryUsage(QQQQ) { - const int gth = theData[1]; - const int size = theData[2]; - const int used = theData[3]; - const int total = theData[4]; - const int block = theData[5]; - const int percent = (used*100)/total; - - BaseString::snprintf(m_text, m_text_len, - "%s usage %s %d%s(%d %dK pages of total %d)", - (block==DBACC ? "Index" : (block == DBTUP ?"Data":"<unknown>")), - (gth == 0 ? "is" : (gth > 0 ? "increased to" : "decreased to")), - percent, "%", - used, size/1024, total - ); -} - -void getTextBackupStarted(QQQQ) { - BaseString::snprintf(m_text, m_text_len, - "Backup %d started from node %d", - theData[2], refToNode(theData[1])); -} -void getTextBackupFailedToStart(QQQQ) { - BaseString::snprintf(m_text, m_text_len, - "Backup request from %d failed to start. Error: %d", - refToNode(theData[1]), theData[2]); -} -void getTextBackupCompleted(QQQQ) { - BaseString::snprintf(m_text, m_text_len, - "Backup %u started from node %u completed\n" - " StartGCP: %u StopGCP: %u\n" - " #Records: %u #LogRecords: %u\n" - " Data: %u bytes Log: %u bytes", - theData[2], refToNode(theData[1]), - theData[3], theData[4], theData[6], theData[8], - theData[5], theData[7]); -} -void getTextBackupAborted(QQQQ) { - BaseString::snprintf(m_text, m_text_len, - "Backup %d started from %d has been aborted. Error: %d", - theData[2], - refToNode(theData[1]), - theData[3]); -} - -#if 0 -BaseString::snprintf(m_text, - m_text_len, - "Unknown event: %d", - theData[0]); -#endif - -/** - * This matrix defines which event should be printed when - * - * threshold - is in range [0-15] - * severity - DEBUG to ALERT (Type of log message) - */ - -#define ROW(a,b,c,d) \ -{ NDB_LE_ ## a, b, c, d, getText ## a} - -const EventLoggerBase::EventRepLogLevelMatrix EventLoggerBase::matrix[] = { - // CONNECTION - ROW(Connected, LogLevel::llConnection, 8, Logger::LL_INFO ), - ROW(Disconnected, LogLevel::llConnection, 8, Logger::LL_ALERT ), - ROW(CommunicationClosed, LogLevel::llConnection, 8, Logger::LL_INFO ), - ROW(CommunicationOpened, LogLevel::llConnection, 8, Logger::LL_INFO ), - ROW(ConnectedApiVersion, LogLevel::llConnection, 8, Logger::LL_INFO ), - // CHECKPOINT - ROW(GlobalCheckpointStarted, LogLevel::llCheckpoint, 9, Logger::LL_INFO ), - ROW(GlobalCheckpointCompleted,LogLevel::llCheckpoint,10, Logger::LL_INFO ), - ROW(LocalCheckpointStarted, LogLevel::llCheckpoint, 7, Logger::LL_INFO ), - ROW(LocalCheckpointCompleted,LogLevel::llCheckpoint, 8, Logger::LL_INFO ), - ROW(LCPStoppedInCalcKeepGci, LogLevel::llCheckpoint, 0, Logger::LL_ALERT ), - ROW(LCPFragmentCompleted, LogLevel::llCheckpoint, 11, Logger::LL_INFO ), - ROW(UndoLogBlocked, LogLevel::llCheckpoint, 7, Logger::LL_INFO ), - - // STARTUP - ROW(NDBStartStarted, LogLevel::llStartUp, 1, Logger::LL_INFO ), - ROW(NDBStartCompleted, LogLevel::llStartUp, 1, Logger::LL_INFO ), - ROW(STTORRYRecieved, LogLevel::llStartUp, 15, Logger::LL_INFO ), - ROW(StartPhaseCompleted, LogLevel::llStartUp, 4, Logger::LL_INFO ), - ROW(CM_REGCONF, LogLevel::llStartUp, 3, Logger::LL_INFO ), - ROW(CM_REGREF, LogLevel::llStartUp, 8, Logger::LL_INFO ), - ROW(FIND_NEIGHBOURS, LogLevel::llStartUp, 8, Logger::LL_INFO ), - ROW(NDBStopStarted, LogLevel::llStartUp, 1, Logger::LL_INFO ), - ROW(NDBStopAborted, LogLevel::llStartUp, 1, Logger::LL_INFO ), - ROW(StartREDOLog, LogLevel::llStartUp, 10, Logger::LL_INFO ), - ROW(StartLog, LogLevel::llStartUp, 10, Logger::LL_INFO ), - ROW(UNDORecordsExecuted, LogLevel::llStartUp, 15, Logger::LL_INFO ), - - // NODERESTART - ROW(NR_CopyDict, LogLevel::llNodeRestart, 8, Logger::LL_INFO ), - ROW(NR_CopyDistr, LogLevel::llNodeRestart, 8, Logger::LL_INFO ), - ROW(NR_CopyFragsStarted, LogLevel::llNodeRestart, 8, Logger::LL_INFO ), - ROW(NR_CopyFragDone, LogLevel::llNodeRestart,10, Logger::LL_INFO ), - ROW(NR_CopyFragsCompleted, LogLevel::llNodeRestart, 8, Logger::LL_INFO ), - - ROW(NodeFailCompleted, LogLevel::llNodeRestart, 8, Logger::LL_ALERT), - ROW(NODE_FAILREP, LogLevel::llNodeRestart, 8, Logger::LL_ALERT), - ROW(ArbitState, LogLevel::llNodeRestart, 6, Logger::LL_INFO ), - ROW(ArbitResult, LogLevel::llNodeRestart, 2, Logger::LL_ALERT), - ROW(GCP_TakeoverStarted, LogLevel::llNodeRestart, 7, Logger::LL_INFO ), - ROW(GCP_TakeoverCompleted, LogLevel::llNodeRestart, 7, Logger::LL_INFO ), - ROW(LCP_TakeoverStarted, LogLevel::llNodeRestart, 7, Logger::LL_INFO ), - ROW(LCP_TakeoverCompleted, LogLevel::llNodeRestart, 7, Logger::LL_INFO ), - - // STATISTIC - ROW(TransReportCounters, LogLevel::llStatistic, 8, Logger::LL_INFO ), - ROW(OperationReportCounters, LogLevel::llStatistic, 8, Logger::LL_INFO ), - ROW(TableCreated, LogLevel::llStatistic, 7, Logger::LL_INFO ), - ROW(JobStatistic, LogLevel::llStatistic, 9, Logger::LL_INFO ), - ROW(SendBytesStatistic, LogLevel::llStatistic, 9, Logger::LL_INFO ), - ROW(ReceiveBytesStatistic, LogLevel::llStatistic, 9, Logger::LL_INFO ), - ROW(MemoryUsage, LogLevel::llStatistic, 5, Logger::LL_INFO ), - - // ERROR - ROW(TransporterError, LogLevel::llError, 2, Logger::LL_ERROR ), - ROW(TransporterWarning, LogLevel::llError, 8, Logger::LL_WARNING ), - ROW(MissedHeartbeat, LogLevel::llError, 8, Logger::LL_WARNING ), - ROW(DeadDueToHeartbeat, LogLevel::llError, 8, Logger::LL_ALERT ), - ROW(WarningEvent, LogLevel::llError, 2, Logger::LL_WARNING ), - // INFO - ROW(SentHeartbeat, LogLevel::llInfo, 12, Logger::LL_INFO ), - ROW(CreateLogBytes, LogLevel::llInfo, 11, Logger::LL_INFO ), - ROW(InfoEvent, LogLevel::llInfo, 2, Logger::LL_INFO ), - - // Backup - ROW(BackupStarted, LogLevel::llBackup, 7, Logger::LL_INFO ), - ROW(BackupCompleted, LogLevel::llBackup, 7, Logger::LL_INFO ), - ROW(BackupFailedToStart, LogLevel::llBackup, 7, Logger::LL_ALERT), - ROW(BackupAborted, LogLevel::llBackup, 7, Logger::LL_ALERT ) -}; - -const Uint32 EventLoggerBase::matrixSize= -sizeof(EventLoggerBase::matrix)/sizeof(EventRepLogLevelMatrix); - -EventLogger::EventLogger() : m_filterLevel(15) -{ - setCategory("EventLogger"); - enable(Logger::LL_INFO, Logger::LL_ALERT); -} - -EventLogger::~EventLogger() -{ -} - -bool -EventLogger::open(const char* logFileName, int maxNoFiles, long maxFileSize, - unsigned int maxLogEntries) -{ - return addHandler(new FileLogHandler(logFileName, maxNoFiles, maxFileSize, - maxLogEntries)); -} - -void -EventLogger::close() -{ - removeAllHandlers(); -} - -static NdbOut& -operator<<(NdbOut& out, const LogLevel & ll) -{ - out << "[LogLevel: "; - for(size_t i = 0; i<LogLevel::LOGLEVEL_CATEGORIES; i++) - out << ll.getLogLevel((LogLevel::EventCategory)i) << " "; - out << "]"; - return out; -} - -int -EventLoggerBase::event_lookup(int eventType, - LogLevel::EventCategory &cat, - Uint32 &threshold, - Logger::LoggerLevel &severity, - EventTextFunction &textF) -{ - for(unsigned i = 0; i<EventLoggerBase::matrixSize; i++){ - if(EventLoggerBase::matrix[i].eventType == eventType){ - cat = EventLoggerBase::matrix[i].eventCategory; - threshold = EventLoggerBase::matrix[i].threshold; - severity = EventLoggerBase::matrix[i].severity; - textF= EventLoggerBase::matrix[i].textF; - return 0; - } - } - return 1; -} - -const char* -EventLogger::getText(char * dst, size_t dst_len, - EventTextFunction textF, - const Uint32* theData, NodeId nodeId ) -{ - int pos= 0; - if (nodeId != 0) - { - BaseString::snprintf(dst, dst_len, "Node %u: ", nodeId); - pos= strlen(dst); - } - if (dst_len-pos > 0) - textF(dst+pos,dst_len-pos,theData); - return dst; -} - -void -EventLogger::log(int eventType, const Uint32* theData, NodeId nodeId, - const LogLevel* ll) -{ - Uint32 threshold = 0; - Logger::LoggerLevel severity = Logger::LL_WARNING; - LogLevel::EventCategory cat= LogLevel::llInvalid; - EventTextFunction textF; - - DBUG_ENTER("EventLogger::log"); - DBUG_PRINT("enter",("eventType=%d, nodeid=%d", eventType, nodeId)); - - if (EventLoggerBase::event_lookup(eventType,cat,threshold,severity,textF)) - DBUG_VOID_RETURN; - - Uint32 set = ll?ll->getLogLevel(cat) : m_logLevel.getLogLevel(cat); - DBUG_PRINT("info",("threshold=%d, set=%d", threshold, set)); - if (ll) - DBUG_PRINT("info",("m_logLevel.getLogLevel=%d", m_logLevel.getLogLevel(cat))); - - if (threshold <= set){ - getText(m_text,sizeof(m_text),textF,theData,nodeId); - - switch (severity){ - case Logger::LL_ALERT: - alert(m_text); - break; - case Logger::LL_CRITICAL: - critical(m_text); - break; - case Logger::LL_WARNING: - warning(m_text); - break; - case Logger::LL_ERROR: - error(m_text); - break; - case Logger::LL_INFO: - info(m_text); - break; - case Logger::LL_DEBUG: - debug(m_text); - break; - default: - info(m_text); - break; - } - } // if (.. - DBUG_VOID_RETURN; -} - -int -EventLogger::getFilterLevel() const -{ - return m_filterLevel; -} - -void -EventLogger::setFilterLevel(int filterLevel) -{ - m_filterLevel = filterLevel; -} - -// -// PRIVATE -// |