diff --git a/src/Microsoft.SqlTools.ServiceLayer/Connection/ConnectionService.cs b/src/Microsoft.SqlTools.ServiceLayer/Connection/ConnectionService.cs index 26a63263..d4466c22 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/Connection/ConnectionService.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/Connection/ConnectionService.cs @@ -1128,6 +1128,7 @@ namespace Microsoft.SqlTools.ServiceLayer.Connection serviceHost.SetRequestHandler(ChangeDatabaseRequest.Type, HandleChangeDatabaseRequest, true); serviceHost.SetRequestHandler(GetConnectionStringRequest.Type, HandleGetConnectionStringRequest, true); serviceHost.SetRequestHandler(BuildConnectionInfoRequest.Type, HandleBuildConnectionInfoRequest, true); + serviceHost.SetRequestHandler(ClearPooledConnectionsRequest.Type, HandleClearPooledConnectionsRequest, true); serviceHost.SetEventHandler(EncryptionKeysChangedNotification.Type, HandleEncryptionKeysNotificationEvent, false); } @@ -1689,6 +1690,24 @@ namespace Microsoft.SqlTools.ServiceLayer.Connection } } + /// + /// Clears all pooled connections from SqlConnection pool, releasing open connection sockets not actively in use. + /// + /// Request param + /// Request Context + /// + public async Task HandleClearPooledConnectionsRequest(object _, RequestContext requestContext) + { + // Run a detached task to clear pools in backend. + await Task.Factory.StartNew(() => Task.Run(async () => { + + SqlConnection.ClearAllPools(); + + Logger.Verbose("Cleared all pooled connections successfully."); + await requestContext.SendResult(true); + })); + } + public ConnectionDetails ParseConnectionString(string connectionString) { SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(connectionString); diff --git a/src/Microsoft.SqlTools.ServiceLayer/Connection/Contracts/ClearPooledConnectionsRequest.cs b/src/Microsoft.SqlTools.ServiceLayer/Connection/Contracts/ClearPooledConnectionsRequest.cs new file mode 100644 index 00000000..97352cf6 --- /dev/null +++ b/src/Microsoft.SqlTools.ServiceLayer/Connection/Contracts/ClearPooledConnectionsRequest.cs @@ -0,0 +1,18 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. +// + +using Microsoft.SqlTools.Hosting.Protocol.Contracts; + +namespace Microsoft.SqlTools.ServiceLayer.Connection.Contracts +{ + /// + /// Clear Pooled connectins request + /// + public class ClearPooledConnectionsRequest + { + public static readonly + RequestType Type = RequestType.Create("connection/clearpooledconnections"); + } +}