Repository: incubator-hawq Updated Branches: refs/heads/master 14359278d -> 856991354
HAWQ-678. Resource manager should close connection with QD when QD is cancelled and try to return resource to clean up all registered resource context Project: http://git-wip-us.apache.org/repos/asf/incubator-hawq/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-hawq/commit/85699135 Tree: http://git-wip-us.apache.org/repos/asf/incubator-hawq/tree/85699135 Diff: http://git-wip-us.apache.org/repos/asf/incubator-hawq/diff/85699135 Branch: refs/heads/master Commit: 8569913548b37498d36a008f17267e30b0de9558 Parents: 1435927 Author: YI JIN <[email protected]> Authored: Fri Apr 15 11:47:54 2016 +1000 Committer: YI JIN <[email protected]> Committed: Fri Apr 15 11:47:54 2016 +1000 ---------------------------------------------------------------------- src/backend/resourcemanager/conntrack.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/85699135/src/backend/resourcemanager/conntrack.c ---------------------------------------------------------------------- diff --git a/src/backend/resourcemanager/conntrack.c b/src/backend/resourcemanager/conntrack.c index 2babef4..c5b0fbf 100644 --- a/src/backend/resourcemanager/conntrack.c +++ b/src/backend/resourcemanager/conntrack.c @@ -264,6 +264,23 @@ int retrieveConnectionTrack(ConnectionTrack track, int32_t connid) Assert( oldct != NULL ); + /* + * If the old connection track has an active connection, close it and cut + * its relation with comm buffer. + */ + if ( oldct->CommBuffer != NULL ) + { + AsyncCommBuffer commbuffer = oldct->CommBuffer; + AsyncCommMessageHandlerContext context = commbuffer->UserData; + elog(WARNING, "Uncompleted resource negotiation is found, force FD %d " + "closed.", + commbuffer->FD); + /* Cut the reference between connection track and rmcomm buffer. */ + oldct->CommBuffer = NULL; + context->UserData = NULL; + forceCloseFileDesc(commbuffer); + } + track->ConnID = oldct->ConnID; track->Progress = oldct->Progress; track->QueueID = oldct->QueueID;
