MCPcopy Create free account
hub / github.com/apache/cloudberry / fillinErrorDataFromSegvChunk

Function fillinErrorDataFromSegvChunk

src/backend/postmaster/syslogger.c:1055–1111  ·  view source on GitHub ↗

* setErrorDataFromSegvChunk * Fill in the given error data with the chunk that contains the message * sent in a SEGV/BUS/ILL handler. */

Source from the content-addressed store, hash-verified

1053 * sent in a SEGV/BUS/ILL handler.
1054 */
1055static void
1056fillinErrorDataFromSegvChunk(GpErrorData *errorData, PipeProtoChunk *chunk)
1057{
1058 Assert(chunk != NULL &&
1059 chunk->hdr.is_segv_msg == 't' &&
1060 chunk->hdr.is_last == 't');
1061
1062 GpSegvErrorData *segvData = (GpSegvErrorData *)chunk->data;
1063
1064 errorData->fix_fields.session_start_time = segvData->session_start_time;
1065 errorData->fix_fields.omit_location = 'f';
1066
1067 /* This field is always true now. We should remove this eventually. */
1068 errorData->fix_fields.gp_is_primary = 't';
1069 errorData->fix_fields.gp_session_id = segvData->gp_session_id;
1070 errorData->fix_fields.gp_command_count = segvData->gp_command_count;
1071 errorData->fix_fields.gp_segment_id = segvData->gp_segment_id;
1072 errorData->fix_fields.slice_id = segvData->slice_id;
1073 errorData->fix_fields.error_cursor_pos = 0;
1074 errorData->fix_fields.internal_query_pos = 0;
1075 errorData->fix_fields.error_fileline = 0;
1076 errorData->fix_fields.top_trans_id = 0;
1077 errorData->fix_fields.dist_trans_id = 0;
1078 errorData->fix_fields.local_trans_id = 0;
1079 errorData->fix_fields.subtrans_id = 0;
1080
1081 errorData->username = NULL;
1082 errorData->databasename = NULL;
1083 errorData->remote_host = NULL;
1084 errorData->remote_port = NULL;
1085 errorData->error_severity = "PANIC";
1086 errorData->sql_state = "XX000";
1087 errorData->error_message = palloc0(ERROR_MESSAGE_MAX_SIZE);
1088
1089 const char *signalName = SegvBusIllName(segvData->signal_num);
1090 Assert(signalName != NULL);
1091 snprintf(errorData->error_message, ERROR_MESSAGE_MAX_SIZE,
1092 "Unexpected internal error: %s received signal %s",
1093 Gp_role == GP_ROLE_DISPATCH ? "Master process" : "Segment process",
1094 signalName);
1095
1096 errorData->error_detail = NULL;
1097 errorData->error_hint = NULL;
1098 errorData->internal_query = NULL;
1099 errorData->error_context = NULL;
1100 errorData->debug_query_string = NULL;
1101 errorData->error_func_name = NULL;
1102 errorData->error_filename = NULL;
1103 errorData->stacktrace = NULL;
1104
1105 if (segvData->frame_depth > 0)
1106 {
1107 void *stackAddressArray = (chunk->data + MAXALIGN(sizeof(GpSegvErrorData)));
1108 void **stackAddresses = stackAddressArray;
1109 errorData->stacktrace = gp_stacktrace(stackAddresses, segvData->frame_depth);
1110 }
1111}
1112

Callers 1

syslogger_log_segv_chunkFunction · 0.85

Calls 3

palloc0Function · 0.50
SegvBusIllNameFunction · 0.50
gp_stacktraceFunction · 0.50

Tested by

no test coverage detected