void ErrorReporter::formatMessage(int faultID, const char* problemData, const char* objRef, const char* theNameOfTheTraceFile, char* messptr){ int processId; ndbd_exit_classification cl; ndbd_exit_status st; const char *exit_msg = ndbd_exit_message(faultID, &cl); const char *exit_cl_msg = ndbd_exit_classification_message(cl, &st); const char *exit_st_msg = ndbd_exit_status_message(st); processId = NdbHost_GetProcessId(); BaseString::snprintf(messptr, MESSAGE_LENGTH, "Time: %s\n" "Status: %s\n" "Message: %s (%s)\n" "Error: %d\n" "Error data: %s\n" "Error object: %s\n" "Program: %s\n" "Pid: %d\n" "Trace: %s\n" "Version: %s\n" "***EOM***\n", formatTimeStampString() , exit_st_msg, exit_msg, exit_cl_msg, faultID, (problemData == NULL) ? "" : problemData, objRef, my_progname, processId, theNameOfTheTraceFile ? theNameOfTheTraceFile : "<no tracefile>", NDB_VERSION_STRING); // Add trailing blanks to get a fixed lenght of the message while (strlen(messptr) <= MESSAGE_LENGTH-3){ strcat(messptr, " "); } strcat(messptr, "\n"); return; }
void ErrorReporter::formatMessage(int thr_no, Uint32 num_threads, int faultID, const char* problemData, const char* objRef, const char* theNameOfTheTraceFile, char* messptr){ int processId; ndbd_exit_classification cl; ndbd_exit_status st; const char *exit_msg = ndbd_exit_message(faultID, &cl); const char *exit_cl_msg = ndbd_exit_classification_message(cl, &st); const char *exit_st_msg = ndbd_exit_status_message(st); int sofar; processId = NdbHost_GetProcessId(); char thrbuf[100] = ""; if (thr_no >= 0) { BaseString::snprintf(thrbuf, sizeof(thrbuf), " thr: %u", thr_no); } BaseString::snprintf(messptr, MESSAGE_LENGTH, "Time: %s\n" "Status: %s\n" "Message: %s (%s)\n" "Error: %d\n" "Error data: %s\n" "Error object: %s\n" "Program: %s\n" "Pid: %d%s\n" "Version: %s\n" "Trace: %s", formatTimeStampString() , exit_st_msg, exit_msg, exit_cl_msg, faultID, (problemData == NULL) ? "" : problemData, objRef, my_progname, processId, thrbuf, NDB_VERSION_STRING, theNameOfTheTraceFile ? theNameOfTheTraceFile : "<no tracefile>"); if (theNameOfTheTraceFile) { for (Uint32 i = 1 ; i < num_threads; i++) { sofar = strlen(messptr); if(sofar < MESSAGE_LENGTH) { BaseString::snprintf(messptr + sofar, MESSAGE_LENGTH - sofar, " %s_t%u", theNameOfTheTraceFile, i); } } } sofar = strlen(messptr); if(sofar < MESSAGE_LENGTH) { BaseString::snprintf(messptr + sofar, MESSAGE_LENGTH - sofar, "\n" "***EOM***\n"); } // Add trailing blanks to get a fixed length of the message while (strlen(messptr) <= MESSAGE_LENGTH-3){ strcat(messptr, " "); } messptr[MESSAGE_LENGTH -2]='\n'; messptr[MESSAGE_LENGTH -1]=0; return; }