From 14e3b3a3f6d83bb7e953dc18f471ffb8ceb32eaf Mon Sep 17 00:00:00 2001 From: Karl Burtram Date: Thu, 12 Oct 2017 16:56:20 -0700 Subject: [PATCH] Increase OE timeout to 60 seconds (#492) --- .../ObjectExplorer/ObjectExplorerService.cs | 17 +++++++++-------- .../SqlContext/ObjectExplorerSettings.cs | 4 ++-- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/src/Microsoft.SqlTools.ServiceLayer/ObjectExplorer/ObjectExplorerService.cs b/src/Microsoft.SqlTools.ServiceLayer/ObjectExplorer/ObjectExplorerService.cs index 3785ff96..bdebff69 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/ObjectExplorer/ObjectExplorerService.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/ObjectExplorer/ObjectExplorerService.cs @@ -44,8 +44,7 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer private ConcurrentDictionary sessionMap; private readonly Lazy>> applicableNodeChildFactories; private IMultiServiceProvider serviceProvider; - private ConnectedBindingQueue bindingQueue = new ConnectedBindingQueue(needsMetadata: false); - private const int PrepopulateBindTimeout = 10000; + private ConnectedBindingQueue bindingQueue = new ConnectedBindingQueue(needsMetadata: false); /// @@ -391,13 +390,13 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer { try { + int timeout = (int)TimeSpan.FromSeconds(settings?.ExpandTimeout ?? ObjectExplorerSettings.DefaultExpandTimeout).TotalMilliseconds; QueueItem queueItem = bindingQueue.QueueBindingOperation( key: bindingQueue.AddConnectionContext(session.ConnectionInfo, "OE"), - bindingTimeout: PrepopulateBindTimeout, - waitForLockTimeout: PrepopulateBindTimeout, + bindingTimeout: timeout, + waitForLockTimeout: timeout, bindOperation: (bindingContext, cancelToken) => { - if (forceRefresh) { nodes = node.Refresh().Select(x => x.ToNodeInfo()).ToArray(); @@ -453,10 +452,11 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer return null; } + int timeout = (int)TimeSpan.FromSeconds(settings?.CreateSessionTimeout ?? ObjectExplorerSettings.DefaultCreateSessionTimeout).TotalMilliseconds; QueueItem queueItem = bindingQueue.QueueBindingOperation( key: bindingQueue.AddConnectionContext(connectionInfo), - bindingTimeout: PrepopulateBindTimeout, - waitForLockTimeout: PrepopulateBindTimeout, + bindingTimeout: timeout, + waitForLockTimeout: timeout, bindOperation: (bindingContext, cancelToken) => { session = ObjectExplorerSession.CreateSession(connectionResult, serviceProvider, bindingContext.ServerConnection); @@ -465,6 +465,7 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer sessionMap.AddOrUpdate(uri, session, (key, oldSession) => session); return session; }); + queueItem.ItemProcessed.WaitOne(); if (queueItem.GetResultAsT() != null) { @@ -551,7 +552,7 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer } else if (!task.IsCompleted) { - result.Exception = new TimeoutException($"Object Explorer task didn't completed in {timeoutInSec} seconds."); + result.Exception = new TimeoutException($"Object Explorer task didn't complete within {timeoutInSec} seconds."); } return result; } diff --git a/src/Microsoft.SqlTools.ServiceLayer/SqlContext/ObjectExplorerSettings.cs b/src/Microsoft.SqlTools.ServiceLayer/SqlContext/ObjectExplorerSettings.cs index ea22fa51..8680b137 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/SqlContext/ObjectExplorerSettings.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/SqlContext/ObjectExplorerSettings.cs @@ -10,8 +10,8 @@ namespace Microsoft.SqlTools.ServiceLayer.SqlContext /// public class ObjectExplorerSettings { - public static int DefaultCreateSessionTimeout = 30; - public static int DefaultExpandTimeout = 30; + public static int DefaultCreateSessionTimeout = 60; + public static int DefaultExpandTimeout = 60; public ObjectExplorerSettings() {