Repository: incubator-hawq Updated Branches: refs/heads/master ad7187348 -> 2a7c20f2b
HAWQ-1258. Segment resource manager does not switch back when it cannot resolve standby host name Project: http://git-wip-us.apache.org/repos/asf/incubator-hawq/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-hawq/commit/2a7c20f2 Tree: http://git-wip-us.apache.org/repos/asf/incubator-hawq/tree/2a7c20f2 Diff: http://git-wip-us.apache.org/repos/asf/incubator-hawq/diff/2a7c20f2 Branch: refs/heads/master Commit: 2a7c20f2b5eff1563d3f2a7c8f7504bec2099bd3 Parents: ad71873 Author: Yi <[email protected]> Authored: Wed Jan 11 19:40:08 2017 +1100 Committer: Yi <[email protected]> Committed: Wed Jan 11 19:40:08 2017 +1100 ---------------------------------------------------------------------- .../resourcemanager/communication/rmcomm_RMSEG2RM.c | 10 ++++++---- src/backend/resourcemanager/include/dynrm.h | 2 ++ src/backend/resourcemanager/resourcemanager_RMSEG.c | 11 +++++++++++ src/backend/utils/misc/guc.c | 2 +- 4 files changed, 20 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/2a7c20f2/src/backend/resourcemanager/communication/rmcomm_RMSEG2RM.c ---------------------------------------------------------------------- diff --git a/src/backend/resourcemanager/communication/rmcomm_RMSEG2RM.c b/src/backend/resourcemanager/communication/rmcomm_RMSEG2RM.c index 92946c8..4c93f78 100644 --- a/src/backend/resourcemanager/communication/rmcomm_RMSEG2RM.c +++ b/src/backend/resourcemanager/communication/rmcomm_RMSEG2RM.c @@ -107,8 +107,10 @@ int sendIMAlive(int *errorcode, if ( res != FUNC_RETURN_OK ) { rm_pfree(AsyncCommContext, context); - elog(WARNING, "Fail to register asynchronous connection for sending " - "IMAlive message. %d", res); + elog(LOG, "failed to register asynchronous connection for sending " + "IMAlive message. %d", res); + /* Always switch if fail to register connection here. */ + switchIMAliveSendingTarget(); return res; } @@ -140,7 +142,7 @@ void receivedIMAliveResponse(AsyncCommMessageHandlerContext context, buffersize != sizeof(RPCResponseIMAliveData) ) { elog(WARNING, "Segment's resource manager received wrong response for " "heart-beat request."); - DRMGlobalInstance->SendToStandby = !DRMGlobalInstance->SendToStandby; + switchIMAliveSendingTarget(); } else { @@ -165,7 +167,7 @@ void sentIMAliveError(AsyncCommMessageHandlerContext context) else elog(WARNING, "Segment's resource manager sending IMAlive message " "switches from master to standby"); - DRMGlobalInstance->SendToStandby = !DRMGlobalInstance->SendToStandby; + switchIMAliveSendingTarget(); } void sentIMAliveCleanUp(AsyncCommMessageHandlerContext context) http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/2a7c20f2/src/backend/resourcemanager/include/dynrm.h ---------------------------------------------------------------------- diff --git a/src/backend/resourcemanager/include/dynrm.h b/src/backend/resourcemanager/include/dynrm.h index bd4a303..a6309c8 100644 --- a/src/backend/resourcemanager/include/dynrm.h +++ b/src/backend/resourcemanager/include/dynrm.h @@ -322,4 +322,6 @@ int initializeSocketServer_RMSEG(void); int MainHandlerLoop_RMSEG(void); void checkAndBuildFailedTmpDirList(void); + +void switchIMAliveTarget(void); #endif //DYNAMIC_RESOURCE_MANAGEMENT_H http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/2a7c20f2/src/backend/resourcemanager/resourcemanager_RMSEG.c ---------------------------------------------------------------------- diff --git a/src/backend/resourcemanager/resourcemanager_RMSEG.c b/src/backend/resourcemanager/resourcemanager_RMSEG.c index f3042eb..f8afe5a 100644 --- a/src/backend/resourcemanager/resourcemanager_RMSEG.c +++ b/src/backend/resourcemanager/resourcemanager_RMSEG.c @@ -275,3 +275,14 @@ void checkAndBuildFailedTmpDirList(void) "directory, which costs " UINT64_FORMAT " us", endtime - starttime); } + +void switchIMAliveSendingTarget(void) +{ + /* We switch to standby server only when it is correctly set. */ + if (pg_strcasecmp(standby_addr_host, "none") != 0) + { + DRMGlobalInstance->SendToStandby = !DRMGlobalInstance->SendToStandby; + elog(LOG, "segment will send heart-beat to %s from now on", + DRMGlobalInstance->SendToStandby ? "standby" : "master"); + } +} http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/2a7c20f2/src/backend/utils/misc/guc.c ---------------------------------------------------------------------- diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c index dccd599..fbf19cf 100644 --- a/src/backend/utils/misc/guc.c +++ b/src/backend/utils/misc/guc.c @@ -8200,7 +8200,7 @@ static struct config_string ConfigureNamesString[] = NULL }, &standby_addr_host, - "localhost", NULL, NULL + "none", NULL, NULL }, {
