You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hawq.apache.org by hu...@apache.org on 2016/01/15 07:10:06 UTC

incubator-hawq git commit: HAWQ-289. Support server side and fix issue in client side for hawqfaultinjector

Repository: incubator-hawq
Updated Branches:
  refs/heads/master 7db48c128 -> 3189e0760


HAWQ-289. Support server side and fix issue in client side for hawqfaultinjector


Project: http://git-wip-us.apache.org/repos/asf/incubator-hawq/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-hawq/commit/3189e076
Tree: http://git-wip-us.apache.org/repos/asf/incubator-hawq/tree/3189e076
Diff: http://git-wip-us.apache.org/repos/asf/incubator-hawq/diff/3189e076

Branch: refs/heads/master
Commit: 3189e0760c37788a42d8e561b45d08f7e50a323c
Parents: 7db48c1
Author: doli <do...@pivotal.io>
Authored: Fri Jan 15 14:03:15 2016 +0800
Committer: doli <do...@pivotal.io>
Committed: Fri Jan 15 14:03:15 2016 +0800

----------------------------------------------------------------------
 src/backend/utils/misc/faultinjector.c         | 125 +++++++++-----------
 tools/bin/hawqpylib/hawqarray.py               |   8 +-
 tools/bin/hawqpylib/programs/clsInjectFault.py |   1 -
 3 files changed, 60 insertions(+), 74 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/3189e076/src/backend/utils/misc/faultinjector.c
----------------------------------------------------------------------
diff --git a/src/backend/utils/misc/faultinjector.c b/src/backend/utils/misc/faultinjector.c
index 60af41d..44b7462 100644
--- a/src/backend/utils/misc/faultinjector.c
+++ b/src/backend/utils/misc/faultinjector.c
@@ -44,6 +44,7 @@
 #include "cdb/cdbfilerep.h"
 #include "cdb/cdbresynchronizechangetracking.h"
 #include "postmaster/service.h"
+#include "postmaster/identity.h"
 #include "storage/spin.h"
 #include "storage/shmem.h"
 #include "utils/faultinjector.h"
@@ -1001,7 +1002,6 @@ FaultInjector_NewHashEntry(
 	{
 		case ChangeTrackingDisable:
 		case FileRepConsumerVerification:
-		case StartPrepareTx:
 		case FileRepResync:
 		case FileRepResyncInProgress:
 		case FileRepResyncWorker:
@@ -1014,112 +1014,102 @@ FaultInjector_NewHashEntry(
 		case FileRepTransitionToInSyncMarkCompleted:
 		case FileRepTransitionToInSyncBeforeCheckpoint:
 		case FileRepTransitionToChangeTracking:
-		case TransactionCommitPass1FromCreatePendingToCreated:
-		case TransactionCommitPass1FromDropInMemoryToDropPending:
-		case TransactionCommitPass1FromAbortingCreateNeededToAbortingCreate:
-		case TransactionAbortPass1FromCreatePendingToAbortingCreate:
-		case TransactionAbortPass1FromAbortingCreateNeededToAbortingCreate:
-		case TransactionCommitPass2FromDropInMemoryToDropPending:
-		case TransactionCommitPass2FromAbortingCreateNeededToAbortingCreate:
-		case TransactionAbortPass2FromCreatePendingToAbortingCreate:
-		case TransactionAbortPass2FromAbortingCreateNeededToAbortingCreate:
-			
+		case FileRepConsumer:
+		case FileRepSender:
+		case FileRepReceiver:
+		case FileRepFlush:
+		/* Ashwin */
+		case FileRepChangeTrackingCompacting:
 		case FinishPreparedTransactionCommitPass1FromCreatePendingToCreated:
 		case FinishPreparedTransactionCommitPass2FromCreatePendingToCreated:
-			
 		case FinishPreparedTransactionCommitPass1FromDropInMemoryToDropPending:
 		case FinishPreparedTransactionCommitPass2FromDropInMemoryToDropPending:
-			
 		case FinishPreparedTransactionCommitPass1AbortingCreateNeeded:
 		case FinishPreparedTransactionCommitPass2AbortingCreateNeeded:
-			
 		case FinishPreparedTransactionAbortPass1FromCreatePendingToAbortingCreate:
 //		case FinishPreparedTransactionAbortPass2FromCreatePendingToAbortingCreate:
-			
 		case FinishPreparedTransactionAbortPass1AbortingCreateNeeded:
 		case FinishPreparedTransactionAbortPass2AbortingCreateNeeded:
 		case TwoPhaseTransactionCommitPrepared:
 		case TwoPhaseTransactionAbortPrepared:
-		case ExecSortMKSortMergeRuns:
-		
+			/* This kind of fault injection has not been supported yet. */
+			LockRelease();
+			status = STATUS_ERROR;
+			ereport(WARNING,
+					(errmsg("This kind of fault injection has not been supported yet. "
+							"fault name:'%s' fault type:'%s' ",
+							FaultInjectorIdentifierEnumToString[entry->faultInjectorIdentifier],
+							FaultInjectorTypeEnumToString[entry->faultInjectorType])));
+			snprintf(entry->bufOutput, sizeof(entry->bufOutput),
+					 "This kind of fault injection has not been supported yet. "
+					 "Please check faultname");
+			goto exit;
+
 //		case SubtransactionFlushToFile:
 //		case SubtransactionReadFromFile:
 //		case SubtransactionRelease:
 //		case SubtransactionRollback:
-		/* Ashwin */
-		case FileRepChangeTrackingCompacting:
+		case StartPrepareTx:
+		case TransactionCommitPass1FromCreatePendingToCreated:
+		case TransactionCommitPass1FromDropInMemoryToDropPending:
+		case TransactionCommitPass1FromAbortingCreateNeededToAbortingCreate:
+		case TransactionAbortPass1FromCreatePendingToAbortingCreate:
+		case TransactionAbortPass1FromAbortingCreateNeededToAbortingCreate:
+		case TransactionCommitPass2FromDropInMemoryToDropPending:
+		case TransactionCommitPass2FromAbortingCreateNeededToAbortingCreate:
+		case TransactionAbortPass2FromCreatePendingToAbortingCreate:
+		case TransactionAbortPass2FromAbortingCreateNeededToAbortingCreate:
+		case FaultBeforePendingDeleteRelationEntry:
+		case FaultBeforePendingDeleteDatabaseEntry:
+		case FaultBeforePendingDeleteTablespaceEntry:
+		case FaultBeforePendingDeleteFilespaceEntry:
+		case TransactionAbortAfterDistributedPrepared:
+		case DtmBroadcastPrepare:
+		case DtmBroadcastCommitPrepared:
+		case DtmBroadcastAbortPrepared:
+		case DtmXLogDistributedCommit:
+		case AnalyzeSubxactError:
+		case OptTaskAllocateStringBuffer:
 
-		/* We do not use vmem on master. Therefore, we only attempt large palloc on segments. */
-		case MultiExecHashLargeVmem:
-		case FaultInBackgroundWriterMain:
-			
-			/* SEGMENT */
+			/* These faults are designed for master. */
+			if(!AmIMaster())
 			{
 				LockRelease();
 				status = STATUS_ERROR;
 				ereport(WARNING,
-						(errmsg("could not insert fault injection entry into table, segment not in primary role"
+						(errmsg("could not insert fault injection entry into table, "
+								"This kind of fault injection should be sent to master. "
 								"fault name:'%s' fault type:'%s' ",
 								FaultInjectorIdentifierEnumToString[entry->faultInjectorIdentifier],
 								FaultInjectorTypeEnumToString[entry->faultInjectorType])));
 				snprintf(entry->bufOutput, sizeof(entry->bufOutput), 
-						 "could not insert fault injection, segment not in primary role");
+						 "could not insert fault injection. "
+						 "This kind of fault injection should be sent to master. "
+						 "Please use \"-r master\"");
 				
 				goto exit;
-			}			
+			}
 			break;
 		
-		case FaultBeforePendingDeleteRelationEntry:
-		case FaultBeforePendingDeleteDatabaseEntry:
-		case FaultBeforePendingDeleteTablespaceEntry:
-		case FaultBeforePendingDeleteFilespaceEntry:	
-		case FileRepConsumer:
-		case FileRepSender:
-		case FileRepReceiver:
-		case FileRepFlush:
-		case Postmaster:
-		case PgControl:
-		case PgXlog:
 		case SegmentTransitionRequest:
 		case SegmentProbeResponse:
-			
+		/* We do not use vmem on master. Therefore, we only attempt large palloc on segments. */
+		case MultiExecHashLargeVmem:
 			/* SEGMENT */
+			if(!AmISegment())
 			{
 				LockRelease();
 				status = STATUS_ERROR;
 				ereport(WARNING,
 						(errmsg("could not insert fault injection entry into table, "
-								"segment not in primary or mirror role, "
-								"fault name:'%s' fault type:'%s' ",
-								FaultInjectorIdentifierEnumToString[entry->faultInjectorIdentifier],
-								FaultInjectorTypeEnumToString[entry->faultInjectorType])));
-				snprintf(entry->bufOutput, sizeof(entry->bufOutput), 
-						 "could not insert fault injection, segment not in primary or mirror role");
-				
-				goto exit;
-			}			
-			break;
-			
-		case TransactionAbortAfterDistributedPrepared:
-		case DtmBroadcastPrepare:
-		case DtmBroadcastCommitPrepared:
-		case DtmBroadcastAbortPrepared:
-		case DtmXLogDistributedCommit:			
-		case AnalyzeSubxactError:
-		case OptTaskAllocateStringBuffer:
-			
-			/* TODO: MASTER ONLY */
-			{
-				LockRelease();
-				status = STATUS_ERROR;
-				ereport(WARNING,
-						(errmsg("could not insert fault injection entry into table, "
-								"segment not in master role, "
+								"This kind of fault injection should be sent to segment. "
 								"fault name:'%s' fault type:'%s' ",
 								FaultInjectorIdentifierEnumToString[entry->faultInjectorIdentifier],
 								FaultInjectorTypeEnumToString[entry->faultInjectorType])));
 				snprintf(entry->bufOutput, sizeof(entry->bufOutput), 
-						 "could not insert fault injection, segment not in master role");
+						 "could not insert fault injection. "
+						 "This kind of fault injection should be sent to segment. "
+						 "Please use \"-r primary\"");
 				
 				goto exit;
 			}			
@@ -1136,6 +1126,7 @@ FaultInjector_NewHashEntry(
 		case RunawayCleanup:
 			
 			/* MASTER OR SEGMENT */
+			if(AmIStandby())
 			{
 				LockRelease();
 				status = STATUS_ERROR;
@@ -1146,7 +1137,7 @@ FaultInjector_NewHashEntry(
 								FaultInjectorIdentifierEnumToString[entry->faultInjectorIdentifier],
 								FaultInjectorTypeEnumToString[entry->faultInjectorType])));
 				snprintf(entry->bufOutput, sizeof(entry->bufOutput), 
-						 "could not insert fault injection, segment not in primary or master role");
+						 "could not insert fault injection, segment not in master or segment role");
 				
 				goto exit;
 			}			

http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/3189e076/tools/bin/hawqpylib/hawqarray.py
----------------------------------------------------------------------
diff --git a/tools/bin/hawqpylib/hawqarray.py b/tools/bin/hawqpylib/hawqarray.py
index eef59b9..947b5e8 100755
--- a/tools/bin/hawqpylib/hawqarray.py
+++ b/tools/bin/hawqpylib/hawqarray.py
@@ -514,15 +514,11 @@ class HAWQArray:
                                       sc.hostname,
                                       sc.address,
                                       sc.port,
-                                      fs.oid,
                                       CASE
                                           WHEN sc.registration_order <= 0 THEN '%s'
                                           ELSE '%s'
                                       END AS datadir
-                               FROM pg_catalog.gp_segment_configuration sc,
-                                    pg_catalog.pg_filespace fs,
-                                    pg_catalog.pg_filespace_entry fse
-                               WHERE fse.fsefsoid = fs.oid
+                               FROM pg_catalog.gp_segment_configuration sc
                                ORDER BY sc.registration_order;''' %
                                (master_data_directory, segment_data_directory))
 
@@ -556,7 +552,7 @@ class HAWQArray:
 
             # Extract fields from the row
             (registration_order, role, status, hostname, 
-             address, port, fsoid, datadir) = row
+             address, port, datadir) = row
 
             # In GPSQL, only master maintain the filespace information.
             # if registration_order != MASTER_REGISTRATION_ORDER and \

http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/3189e076/tools/bin/hawqpylib/programs/clsInjectFault.py
----------------------------------------------------------------------
diff --git a/tools/bin/hawqpylib/programs/clsInjectFault.py b/tools/bin/hawqpylib/programs/clsInjectFault.py
index 4cf8e36..af4d9df 100644
--- a/tools/bin/hawqpylib/programs/clsInjectFault.py
+++ b/tools/bin/hawqpylib/programs/clsInjectFault.py
@@ -136,7 +136,6 @@ class HAWQInjectFaultProgram:
         #
         # prune gpArray according to filter settings
         #
-        hawqdbs = [hdb for hdb in hawqdbs if hdb.isSegment()]
         if targetHost is not None and targetHost != "ALL":
             hawqdbs = [hdb for hdb in hawqdbs if hdb.getHostName() == targetHost]