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

Function HandleFaultMessage

src/backend/utils/misc/faultinjector.c:983–1053  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

981}
982
983void
984HandleFaultMessage(const char* msg)
985{
986 char name[NAMEDATALEN];
987 char type[NAMEDATALEN];
988 char ddl[NAMEDATALEN];
989 char db[NAMEDATALEN];
990 char table[NAMEDATALEN];
991 char faultInjectModuleName[NAMEDATALEN];
992 int start;
993 int end;
994 int extra;
995 int sid;
996 char *result;
997 int len;
998 QueryCompletion qc;
999
1000 qc.commandTag = CMDTAG_FAULT_INJECT;
1001 qc.nprocessed = 0;
1002
1003#ifdef USE_INTERNAL_FTS
1004 int skipFtsProbe;
1005 if (sscanf(msg, "faultname=%s type=%s ddl=%s db=%s table=%s modulename=%s "
1006 "start=%d end=%d extra=%d sid=%d skipftsprobe=%d",
1007 name, type, ddl, db, table, faultInjectModuleName, &start, &end, &extra, &sid, &skipFtsProbe) != 11)
1008 elog(ERROR, "invalid fault message: %s", msg);
1009#else
1010 if (sscanf(msg, "faultname=%s type=%s ddl=%s db=%s table=%s modulename=%s "
1011 "start=%d end=%d extra=%d sid=%d",
1012 name, type, ddl, db, table, faultInjectModuleName, &start, &end, &extra, &sid) != 10)
1013 elog(ERROR, "invalid fault message: %s", msg);
1014#endif
1015 Assert(strlen(faultInjectModuleName) > 0);
1016 load_external_function(faultInjectModuleName, name, false, NULL);
1017
1018 /* The value '#' means not specified. */
1019 if (ddl[0] == '#')
1020 ddl[0] = '\0';
1021 if (db[0] == '#')
1022 db[0] = '\0';
1023 if (table[0] == '#')
1024 table[0] = '\0';
1025
1026 BeginCommand(qc.commandTag, DestRemote);
1027
1028 result = InjectFault(name, type, ddl, db, table, start, end, extra, sid);
1029 len = strlen(result);
1030
1031 StringInfoData buf;
1032 pq_beginmessage(&buf, 'T');
1033 pq_sendint(&buf, Natts_fault_message_response, 2);
1034
1035 pq_sendstring(&buf, "status");
1036 pq_sendint(&buf, 0, 4); /* table oid */
1037 pq_sendint(&buf, Anum_fault_message_response_status, 2); /* attnum */
1038 pq_sendint(&buf, TEXTOID, 4); /* type oid */
1039 pq_sendint(&buf, -1, 2); /* typlen */
1040 pq_sendint(&buf, -1, 4); /* typmod */

Callers 1

PostgresMainFunction · 0.85

Calls 9

load_external_functionFunction · 0.85
BeginCommandFunction · 0.85
InjectFaultFunction · 0.85
pq_beginmessageFunction · 0.85
pq_sendstringFunction · 0.85
pq_endmessageFunction · 0.85
pq_sendbytesFunction · 0.85
EndCommandFunction · 0.85
pq_sendintFunction · 0.50

Tested by

no test coverage detected