提交 c2bbca41 编写于 作者: A Ashwin Agrawal

Remove some unused and not implemented fault types.

Removing the fault types which do not have implementation. Or have
implementation but doesn't seem usable. This will just help to have only working
subset of faults. Like data corruption fault seems pretty useless. Even if
needed then can be easily coded for specific usecase using the skip fault,
instead of having special one defined for it.

Fault type "fault" is redundant with "error" hence removing the same as well.
上级 36d33485
......@@ -1472,32 +1472,6 @@ FileWrite(File file, char *buffer, int amount)
if (returnCode < 0)
return returnCode;
#ifdef FAULT_INJECTOR
if (! strcmp(VfdCache[file].fileName, "global/pg_control"))
{
if (FaultInjector_InjectFaultIfSet(
PgControl,
DDLNotSpecified,
"" /* databaseName */,
"" /* tableName */) == FaultInjectorTypeDataCorruption)
{
MemSet(buffer, 0, amount);
}
}
if (strstr(VfdCache[file].fileName, "pg_xlog/"))
{
if (FaultInjector_InjectFaultIfSet(
PgXlog,
DDLNotSpecified,
"" /* databaseName */,
"" /* tableName */) == FaultInjectorTypeDataCorruption)
{
MemSet(buffer, 0, amount);
}
}
#endif
/*
* If enforcing temp_file_limit and it's a temp file, check to see if the
* write would overrun temp_file_limit, and throw error if so. Note: it's
......
......@@ -365,6 +365,7 @@ FaultInjector_InjectFaultNameIfSet(
case FaultInjectorTypeNotSpecified:
break;
case FaultInjectorTypeSleep:
ereport(LOG,
(errcode(ERRCODE_FAULT_INJECT),
......@@ -374,22 +375,15 @@ FaultInjector_InjectFaultNameIfSet(
pg_usleep(entryLocal->extraArg * 1000000L);
break;
case FaultInjectorTypeFault:
ereport(ERROR,
(errcode(ERRCODE_FAULT_INJECT),
errmsg("currently this fault type has no implementation, fault name:'%s' fault type:'%s' ",
entryLocal->faultName,
FaultInjectorTypeEnumToString[entryLocal->faultInjectorType])));
break;
case FaultInjectorTypeFatal:
ereport(FATAL,
(errcode(ERRCODE_FAULT_INJECT),
errmsg("fault triggered, fault name:'%s' fault type:'%s' ",
entryLocal->faultName,
FaultInjectorTypeEnumToString[entryLocal->faultInjectorType])));
FaultInjectorTypeEnumToString[entryLocal->faultInjectorType])));
break;
case FaultInjectorTypePanic:
/*
* Avoid core file generation for this PANIC. It helps to avoid
......@@ -411,6 +405,7 @@ FaultInjector_InjectFaultNameIfSet(
FaultInjectorTypeEnumToString[entryLocal->faultInjectorType])));
break;
case FaultInjectorTypeError:
ereport(ERROR,
(errcode(ERRCODE_FAULT_INJECT),
......@@ -418,6 +413,7 @@ FaultInjector_InjectFaultNameIfSet(
entryLocal->faultName,
FaultInjectorTypeEnumToString[entryLocal->faultInjectorType])));
break;
case FaultInjectorTypeInfiniteLoop:
ereport(LOG,
(errcode(ERRCODE_FAULT_INJECT),
......@@ -431,13 +427,6 @@ FaultInjector_InjectFaultNameIfSet(
CHECK_FOR_INTERRUPTS();
}
break;
case FaultInjectorTypeDataCorruption:
ereport(LOG,
(errcode(ERRCODE_FAULT_INJECT),
errmsg("fault triggered, fault name:'%s' fault type:'%s' ",
entryLocal->faultName,
FaultInjectorTypeEnumToString[entryLocal->faultInjectorType])));
break;
case FaultInjectorTypeSuspend:
{
......@@ -480,6 +469,7 @@ FaultInjector_InjectFaultNameIfSet(
}
break;
}
case FaultInjectorTypeSkip:
ereport(LOG,
(errcode(ERRCODE_FAULT_INJECT),
......@@ -487,37 +477,7 @@ FaultInjector_InjectFaultNameIfSet(
entryLocal->faultName,
FaultInjectorTypeEnumToString[entryLocal->faultInjectorType])));
break;
case FaultInjectorTypeMemoryFull:
{
char *buffer = NULL;
ereport(LOG,
(errcode(ERRCODE_FAULT_INJECT),
errmsg("fault triggered, fault name:'%s' fault type:'%s' ",
entryLocal->faultName,
FaultInjectorTypeEnumToString[entryLocal->faultInjectorType])));
buffer = (char*) palloc(BLCKSZ);
while (buffer != NULL)
{
buffer = (char*) palloc(BLCKSZ);
}
break;
}
case FaultInjectorTypeReset:
case FaultInjectorTypeStatus:
ereport(LOG,
(errcode(ERRCODE_FAULT_INJECT),
errmsg("unexpected error, fault triggered, fault name:'%s' fault type:'%s' ",
entryLocal->faultName,
FaultInjectorTypeEnumToString[entryLocal->faultInjectorType])));
Assert(0);
break;
case FaultInjectorTypeResume:
break;
......@@ -570,17 +530,6 @@ FaultInjector_InjectFaultNameIfSet(
break;
}
case FaultInjectorTypeCheckpointAndPanic:
{
RequestCheckpoint(CHECKPOINT_WAIT | CHECKPOINT_IMMEDIATE);
ereport(PANIC,
(errcode(ERRCODE_FAULT_INJECT),
errmsg("fault triggered, fault name:'%s' fault type:'%s' ",
entryLocal->faultName,
FaultInjectorTypeEnumToString[entryLocal->faultInjectorType])));
break;
}
default:
ereport(LOG,
......
......@@ -262,22 +262,18 @@ FI_IDENT(CleanupGang, "cleanup_gang")
#ifdef FI_TYPE
FI_TYPE(FaultInjectorTypeNotSpecified = 0, "")
FI_TYPE(FaultInjectorTypeSleep, "sleep")
FI_TYPE(FaultInjectorTypeFault, "fault")
FI_TYPE(FaultInjectorTypeFatal, "fatal")
FI_TYPE(FaultInjectorTypePanic, "panic")
FI_TYPE(FaultInjectorTypeError, "error")
FI_TYPE(FaultInjectorTypeInfiniteLoop, "infinite_loop")
FI_TYPE(FaultInjectorTypeDataCorruption, "data_corruption")
FI_TYPE(FaultInjectorTypeSuspend, "suspend")
FI_TYPE(FaultInjectorTypeResume, "resume")
FI_TYPE(FaultInjectorTypeSkip, "skip")
FI_TYPE(FaultInjectorTypeMemoryFull, "memory_full")
FI_TYPE(FaultInjectorTypeReset, "reset")
FI_TYPE(FaultInjectorTypeStatus, "status")
FI_TYPE(FaultInjectorTypeSegv, "segv")
FI_TYPE(FaultInjectorTypeInterrupt, "interrupt")
FI_TYPE(FaultInjectorTypeFinishPending, "finish_pending")
FI_TYPE(FaultInjectorTypeCheckpointAndPanic, "checkpoint_and_panic")
FI_TYPE(FaultInjectorTypeWaitUntilTriggered, "wait_until_triggered")
#endif
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册