HAWQ-572. Add fault injection test cases for QE side
Project: http://git-wip-us.apache.org/repos/asf/incubator-hawq/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-hawq/commit/475c95c9 Tree: http://git-wip-us.apache.org/repos/asf/incubator-hawq/tree/475c95c9 Diff: http://git-wip-us.apache.org/repos/asf/incubator-hawq/diff/475c95c9 Branch: refs/heads/HAWQ-546 Commit: 475c95c9f0fa5a74904d87708cd0ea9aef71aa6e Parents: fcae7b4 Author: Chunling Wang <wangchunlin...@126.com> Authored: Tue Mar 22 16:49:07 2016 +0800 Committer: Oleksandr Diachenko <odiache...@pivotal.io> Committed: Wed Mar 30 17:23:26 2016 -0700 ---------------------------------------------------------------------- src/backend/access/parquet/parquetam.c | 9 +++++++++ src/backend/cdb/dispatcher.c | 9 +++++++++ src/backend/tcop/pquery.c | 9 +++++++++ src/backend/utils/misc/faultinjector.c | 9 +++++++++ src/include/utils/faultinjector.h | 3 +++ tools/bin/gppylib/programs/clsInjectFault.py | 3 +++ tools/bin/hawqpylib/programs/clsInjectFault.py | 3 +++ 7 files changed, 45 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/475c95c9/src/backend/access/parquet/parquetam.c ---------------------------------------------------------------------- diff --git a/src/backend/access/parquet/parquetam.c b/src/backend/access/parquet/parquetam.c index 3c2b7df..a01f89b 100644 --- a/src/backend/access/parquet/parquetam.c +++ b/src/backend/access/parquet/parquetam.c @@ -33,6 +33,7 @@ #include "utils/relcache.h" #include "utils/tqual.h" #include "utils/rel.h" +#include "utils/faultinjector.h" #include "access/aomd.h" #include "cdb/cdbvars.h" #include "cdb/cdbparquetam.h" @@ -149,6 +150,14 @@ parquet_beginscan( scan->aoEntry = aoEntry; Assert(aoEntry->majorversion == 1 && aoEntry->minorversion == 0); +#ifdef FAULT_INJECTOR + FaultInjector_InjectFaultIfSet( + FailQeWhenBeginParquetScan, + DDLNotSpecified, + "", // databaseName + ""); // tableName +#endif + /* * initialize the scan descriptor */ http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/475c95c9/src/backend/cdb/dispatcher.c ---------------------------------------------------------------------- diff --git a/src/backend/cdb/dispatcher.c b/src/backend/cdb/dispatcher.c index 55a7823..d9d0771 100644 --- a/src/backend/cdb/dispatcher.c +++ b/src/backend/cdb/dispatcher.c @@ -1236,6 +1236,15 @@ dispatch_run(DispatchData *data) INSTR_TIME_SET_CURRENT(data->time_begin); if (!dispatcher_bind_executor(data)) goto error; + +#ifdef FAULT_INJECTOR + FaultInjector_InjectFaultIfSet( + FaillQeAfterConnection, + DDLNotSpecified, + "", // databaseName + ""); // tableName +#endif + /* * Only after we have the executors, we can serialize the state. Or we * don't know the executor listening address. http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/475c95c9/src/backend/tcop/pquery.c ---------------------------------------------------------------------- diff --git a/src/backend/tcop/pquery.c b/src/backend/tcop/pquery.c index f097f01..99b6a1d 100644 --- a/src/backend/tcop/pquery.c +++ b/src/backend/tcop/pquery.c @@ -43,6 +43,7 @@ #include "tcop/pquery.h" #include "tcop/tcopprot.h" #include "tcop/utility.h" +#include "utils/faultinjector.h" #include "utils/memutils.h" #include "utils/resscheduler.h" #include "commands/vacuum.h" @@ -1410,6 +1411,14 @@ PortalRun(Portal portal, int64 count, bool isTopLevel, AssertArg(PortalIsValid(portal)); +#ifdef FAULT_INJECTOR + FaultInjector_InjectFaultIfSet( + FailQeWhenDoQuery, + DDLNotSpecified, + "", // databaseName + ""); // tableName +#endif + /* Initialize completion tag to empty string */ if (completionTag) completionTag[0] = '\0'; http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/475c95c9/src/backend/utils/misc/faultinjector.c ---------------------------------------------------------------------- diff --git a/src/backend/utils/misc/faultinjector.c b/src/backend/utils/misc/faultinjector.c index f5ab5bc..a760b4d 100644 --- a/src/backend/utils/misc/faultinjector.c +++ b/src/backend/utils/misc/faultinjector.c @@ -287,6 +287,12 @@ FaultInjectorIdentifierEnumToString[] = { /* inject fault when create cdb dispatch result object, set out of memory */ _("worker_manager_submit_job"), /* inject fault when worker manager submit job , set error*/ + _("fail_qe_after_connection"), + /* inject fault after connecting to QD, sleep to wait QE fail */ + _("fail_qe_when_do_query"), + /* inject fault when QE actually working, set error */ + _("fail_qe_when_begin_parquet_scan"), + /* inject fault when begin scan parquet table, set error */ /* _("make_dispatch_thread"), inject fault when initialing memory structure for dispatcher thread*/ _("before_dispatch"), @@ -1077,6 +1083,7 @@ FaultInjector_NewHashEntry( case ConnectionFailAfterGangCreation: case CreateCdbDispathResultObject: case WorkerManagerSubmitJob: + case FaillQeAfterConnection: /* These faults are designed for master. */ if(!AmIMaster()) @@ -1102,6 +1109,8 @@ FaultInjector_NewHashEntry( case SegmentProbeResponse: /* We do not use vmem on master. Therefore, we only attempt large palloc on segments. */ case MultiExecHashLargeVmem: + case FailQeWhenDoQuery: + case FailQeWhenBeginParquetScan: /* SEGMENT */ if(!AmISegment()) { http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/475c95c9/src/include/utils/faultinjector.h ---------------------------------------------------------------------- diff --git a/src/include/utils/faultinjector.h b/src/include/utils/faultinjector.h index ca9c278..8f94349 100644 --- a/src/include/utils/faultinjector.h +++ b/src/include/utils/faultinjector.h @@ -190,6 +190,9 @@ typedef enum FaultInjectorIdentifier_e { /* MakeDispatchThread,*/ CreateCdbDispathResultObject, WorkerManagerSubmitJob, + FaillQeAfterConnection, + FailQeWhenDoQuery, + FailQeWhenBeginParquetScan, BeforeDispatch, http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/475c95c9/tools/bin/gppylib/programs/clsInjectFault.py ---------------------------------------------------------------------- diff --git a/tools/bin/gppylib/programs/clsInjectFault.py b/tools/bin/gppylib/programs/clsInjectFault.py index 6f097d8..8c166bb 100644 --- a/tools/bin/gppylib/programs/clsInjectFault.py +++ b/tools/bin/gppylib/programs/clsInjectFault.py @@ -408,6 +408,9 @@ class GpInjectFaultProgram: "connection_fail_after_gang_creation (inject fault after gang thread creation, set connection null)" \ "create_cdb_dispath_result_object (inject fault when create cdb dispatch result object, set out of memeory)" \ "worker_manager_submit_job (inject fault when worker manager submit job , set error)" \ + "fail_qe_after_connection (inject fault after connecting to QD, sleep to wait QE fail)" \ + "fail_qe_when_do_query (inject fault when QE actually working, set error)" \ + "fail_qe_when_begin_parquet_scan (inject fault when begin scan parquet table, set error)"\ "all (affects all faults injected, used for 'status' and 'reset'), ") addTo.add_option("-c", "--ddl_statement", dest="ddlStatement", type="string", metavar="ddlStatement", http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/475c95c9/tools/bin/hawqpylib/programs/clsInjectFault.py ---------------------------------------------------------------------- diff --git a/tools/bin/hawqpylib/programs/clsInjectFault.py b/tools/bin/hawqpylib/programs/clsInjectFault.py index 8992f9d..e1944fb 100644 --- a/tools/bin/hawqpylib/programs/clsInjectFault.py +++ b/tools/bin/hawqpylib/programs/clsInjectFault.py @@ -416,6 +416,9 @@ class HAWQInjectFaultProgram: "connection_fail_after_gang_creation (inject fault after gang thread creation, set connection null)" \ "create_cdb_dispath_result_object (inject fault when create cdb dispatch result object, set out of memory)" \ "worker_manager_submit_job (inject fault when worker manager submit job , set error)" \ + "fail_qe_after_connection (inject fault after connecting to QD, sleep to wait QE fail)" \ + "fail_qe_when_do_query (inject fault when QE actually working, set error)" \ + "fail_qe_when_begin_parquet_scan (inject fault when begin scan parquet table, set error)"\ "all (affects all faults injected, used for 'status' and 'reset'), ") addTo.add_option("-c", "--ddl_statement", dest="ddlStatement", type="string", metavar="ddlStatement",