Return-Path: X-Original-To: apmail-hawq-commits-archive@minotaur.apache.org Delivered-To: apmail-hawq-commits-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id B7FE319D20 for ; Fri, 18 Mar 2016 02:58:31 +0000 (UTC) Received: (qmail 58812 invoked by uid 500); 18 Mar 2016 02:58:31 -0000 Delivered-To: apmail-hawq-commits-archive@hawq.apache.org Received: (qmail 58765 invoked by uid 500); 18 Mar 2016 02:58:31 -0000 Mailing-List: contact commits-help@hawq.incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@hawq.incubator.apache.org Delivered-To: mailing list commits@hawq.incubator.apache.org Received: (qmail 58756 invoked by uid 99); 18 Mar 2016 02:58:31 -0000 Received: from pnap-us-west-generic-nat.apache.org (HELO spamd3-us-west.apache.org) (209.188.14.142) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 18 Mar 2016 02:58:31 +0000 Received: from localhost (localhost [127.0.0.1]) by spamd3-us-west.apache.org (ASF Mail Server at spamd3-us-west.apache.org) with ESMTP id 4BE591802E9 for ; Fri, 18 Mar 2016 02:58:31 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at spamd3-us-west.apache.org X-Spam-Flag: NO X-Spam-Score: -3.221 X-Spam-Level: X-Spam-Status: No, score=-3.221 tagged_above=-999 required=6.31 tests=[KAM_ASCII_DIVIDERS=0.8, KAM_LAZY_DOMAIN_SECURITY=1, RCVD_IN_DNSWL_HI=-5, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, RP_MATCHES_RCVD=-0.001] autolearn=disabled Received: from mx1-lw-us.apache.org ([10.40.0.8]) by localhost (spamd3-us-west.apache.org [10.40.0.10]) (amavisd-new, port 10024) with ESMTP id eHPnZfskvqqM for ; Fri, 18 Mar 2016 02:58:29 +0000 (UTC) Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by mx1-lw-us.apache.org (ASF Mail Server at mx1-lw-us.apache.org) with SMTP id 4731D5F19A for ; Fri, 18 Mar 2016 02:58:29 +0000 (UTC) Received: (qmail 58750 invoked by uid 99); 18 Mar 2016 02:58:28 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 18 Mar 2016 02:58:28 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id 8ABB9DFAB5; Fri, 18 Mar 2016 02:58:28 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: yjin@apache.org To: commits@hawq.incubator.apache.org Message-Id: X-Mailer: ASF-Git Admin Mailer Subject: incubator-hawq git commit: HAWQ-557. Set connection pool connections always NODELAY and KEEPALIVE Date: Fri, 18 Mar 2016 02:58:28 +0000 (UTC) Repository: incubator-hawq Updated Branches: refs/heads/master f38ad1147 -> e82ac3f17 HAWQ-557. Set connection pool connections always NODELAY and KEEPALIVE Project: http://git-wip-us.apache.org/repos/asf/incubator-hawq/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-hawq/commit/e82ac3f1 Tree: http://git-wip-us.apache.org/repos/asf/incubator-hawq/tree/e82ac3f1 Diff: http://git-wip-us.apache.org/repos/asf/incubator-hawq/diff/e82ac3f1 Branch: refs/heads/master Commit: e82ac3f17319dcc630b467868491089a189aeeec Parents: f38ad11 Author: YI JIN Authored: Fri Mar 18 13:58:18 2016 +1100 Committer: YI JIN Committed: Fri Mar 18 13:58:18 2016 +1100 ---------------------------------------------------------------------- .../communication/rmcomm_AsyncComm.c | 6 +++++ .../communication/rmcomm_Connect.c | 5 ++++ .../communication/rmcomm_QD2RM.c | 27 ++++++++++++++++++++ .../include/utils/network_utils.h | 1 + .../resourcemanager/utils/network_utils.c | 20 +++++++++++++++ 5 files changed, 59 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/e82ac3f1/src/backend/resourcemanager/communication/rmcomm_AsyncComm.c ---------------------------------------------------------------------- diff --git a/src/backend/resourcemanager/communication/rmcomm_AsyncComm.c b/src/backend/resourcemanager/communication/rmcomm_AsyncComm.c index 0084edc..181cc86 100644 --- a/src/backend/resourcemanager/communication/rmcomm_AsyncComm.c +++ b/src/backend/resourcemanager/communication/rmcomm_AsyncComm.c @@ -718,6 +718,12 @@ int registerAsyncConnectionFileDesc(const char *address, sockres = connect(fd, (struct sockaddr *)&server_addr, sizeof(server_addr)); if ( sockres == 0 ) { + if ( setConnectionLongTermNoDelay(fd) != FUNC_RETURN_OK ) + { + close(fd); + res = UTIL_NETWORK_FAIL_CONNECT; + goto exit; + } /* * New connection is created. Suppose domain socket and local socket * connection can be done now. Register a normal client FD in poll() to http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/e82ac3f1/src/backend/resourcemanager/communication/rmcomm_Connect.c ---------------------------------------------------------------------- diff --git a/src/backend/resourcemanager/communication/rmcomm_Connect.c b/src/backend/resourcemanager/communication/rmcomm_Connect.c index fd916da..6c58a5c 100644 --- a/src/backend/resourcemanager/communication/rmcomm_Connect.c +++ b/src/backend/resourcemanager/communication/rmcomm_Connect.c @@ -68,6 +68,11 @@ void WriteReadyHandler_Connect(AsyncCommBuffer buffer) shouldclose = true; } + if ( setConnectionLongTermNoDelay(buffer->FD) != FUNC_RETURN_OK ) + { + shouldclose = true; + } + if ( shouldclose ) { ErrorHandler_Connect(buffer); http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/e82ac3f1/src/backend/resourcemanager/communication/rmcomm_QD2RM.c ---------------------------------------------------------------------- diff --git a/src/backend/resourcemanager/communication/rmcomm_QD2RM.c b/src/backend/resourcemanager/communication/rmcomm_QD2RM.c index d601383..59494a0 100644 --- a/src/backend/resourcemanager/communication/rmcomm_QD2RM.c +++ b/src/backend/resourcemanager/communication/rmcomm_QD2RM.c @@ -1440,6 +1440,7 @@ void *generateResourceRefreshHeartBeat(void *arg) int sockres = 0; while(true) { + int on; sockres = connect(fd, (struct sockaddr *)&server_addr, sizeof(server_addr)); @@ -1455,8 +1456,34 @@ void *generateResourceRefreshHeartBeat(void *arg) "failed to connect to resource manager, " "fd %d (errno %d)", fd, errno); close(fd); + fd = -1; } } +#ifdef TCP_NODELAY + on = 1; + if (sockres == 0 && + setsockopt(fd, + IPPROTO_TCP, TCP_NODELAY, + (char *) &on, sizeof(on)) < 0) + { + write_log("ERROR setsockopt(TCP_NODELAY) failed: %m"); + close(fd); + fd = -1; + sockres = -1; + } +#endif + on = 1; + if (sockres == 0 && + setsockopt(fd, + SOL_SOCKET, SO_KEEPALIVE, + (char *) &on, sizeof(on)) < 0) + { + write_log("ERROR setsockopt(SO_KEEPALIVE) failed: %m"); + close(fd); + fd = -1; + sockres = -1; + } + break; } http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/e82ac3f1/src/backend/resourcemanager/include/utils/network_utils.h ---------------------------------------------------------------------- diff --git a/src/backend/resourcemanager/include/utils/network_utils.h b/src/backend/resourcemanager/include/utils/network_utils.h index 4aa2cf0..a048131 100644 --- a/src/backend/resourcemanager/include/utils/network_utils.h +++ b/src/backend/resourcemanager/include/utils/network_utils.h @@ -109,6 +109,7 @@ int setConnectionNonBlocked(int fd); #define DRM_SOCKET_CONN_RETRY 5 int connectToServerRemote(const char *address,uint16_t port,int *clientfd); +int setConnectionLongTermNoDelay(int fd); void closeConnectionRemote(int *clientfd); void returnAliveConnectionRemote(int *clientfd, const char *hostname, http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/e82ac3f1/src/backend/resourcemanager/utils/network_utils.c ---------------------------------------------------------------------- diff --git a/src/backend/resourcemanager/utils/network_utils.c b/src/backend/resourcemanager/utils/network_utils.c index b8bbab9..fbfe0a9 100644 --- a/src/backend/resourcemanager/utils/network_utils.c +++ b/src/backend/resourcemanager/utils/network_utils.c @@ -715,3 +715,23 @@ static void cleanupSocketConnectionPool(int code, Datum arg) freePAIRRefList(&ResolvedHostnames, &addrlist); cleanHASHTABLE(&ResolvedHostnames); } + +int setConnectionLongTermNoDelay(int fd) +{ + int on; +#ifdef TCP_NODELAY + on = 1; + if (setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, (char *) &on, sizeof(on)) < 0) + { + elog(WARNING, "setsockopt(TCP_NODELAY) failed: %m"); + return SYSTEM_CALL_ERROR; + } +#endif + on = 1; + if (setsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, (char *) &on, sizeof(on)) < 0) + { + elog(WARNING, "setsockopt(SO_KEEPALIVE) failed: %m"); + return SYSTEM_CALL_ERROR; + } + return FUNC_RETURN_OK; +}