void TransporterRegistry::report_disconnect(NodeId node_id, int errnum) { DBUG_ENTER("TransporterRegistry::report_disconnect"); DBUG_PRINT("info",("performStates[%d]=DISCONNECTED",node_id)); performStates[node_id] = DISCONNECTED; reportDisconnect(callbackObj, node_id, errnum); DBUG_VOID_RETURN; }
void reportError(void * callbackObj, NodeId nodeId, TransporterError errorCode, const char *info) { #ifdef DEBUG_TRANSPORTER ndbout_c("reportError (%d, 0x%x) %s", nodeId, errorCode, info ? info : "") #endif DBUG_ENTER("reportError"); DBUG_PRINT("info",("nodeId %d errorCode: 0x%x info: %s", nodeId, errorCode, info)); switch (errorCode) { case TE_SIGNAL_LOST_SEND_BUFFER_FULL: { char msg[64]; snprintf(msg, sizeof(msg), "Remote note id %d.%s%s", nodeId, info ? " " : "", info ? info : ""); ErrorReporter::handleError(NDBD_EXIT_SIGNAL_LOST_SEND_BUFFER_FULL, msg, __FILE__, NST_ErrorHandler); } case TE_SIGNAL_LOST: { char msg[64]; snprintf(msg, sizeof(msg), "Remote node id %d,%s%s", nodeId, info ? " " : "", info ? info : ""); ErrorReporter::handleError(NDBD_EXIT_SIGNAL_LOST, msg, __FILE__, NST_ErrorHandler); } case TE_SHM_IPC_PERMANENT: { char msg[128]; snprintf(msg, sizeof(msg), "Remote node id %d.%s%s", nodeId, info ? " " : "", info ? info : ""); ErrorReporter::handleError(NDBD_EXIT_CONNECTION_SETUP_FAILED, msg, __FILE__, NST_ErrorHandler); } default: break; } if(errorCode & TE_DO_DISCONNECT){ reportDisconnect(callbackObj, nodeId, errorCode); } SignalT<3> signalT; Signal &signal= *(Signal*)&signalT; memset(&signal.header, 0, sizeof(signal.header)); if(errorCode & TE_DO_DISCONNECT) signal.theData[0] = NDB_LE_TransporterError; else signal.theData[0] = NDB_LE_TransporterWarning; signal.theData[1] = nodeId; signal.theData[2] = errorCode; signal.header.theLength = 3; signal.header.theSendersSignalId = 0; signal.header.theSendersBlockRef = numberToRef(0, globalData.ownId); globalScheduler.execute(&signal, JBA, CMVMI, GSN_EVENT_REP); DBUG_VOID_RETURN; }