MichaelZ created TINKERPOP-2268:
-----------------------------------
Summary: Prevent Connection Failure from Hanging
Key: TINKERPOP-2268
URL: https://issues.apache.org/jira/browse/TINKERPOP-2268
Project: TinkerPop
Issue Type: Improvement
Components: dotnet, driver
Environment: .Net Core
Reporter: MichaelZ
When a consumer of the Gremlin.Net client calls to execute a Gremlin query,
i.e. "SubmitAsync," and there is no valid connection, there will be a costly
timeout error. I have experienced 30 to 90 second timeouts.
I was on vacation, so I didn't do this earlier, but I have written a little
patch that will refresh the connection pool when there is no valid connection,
and it works flawlessly. This is quick code, and there is a more elegant
solution, but what I did is to check IsOpen on the first connection snapshot,
and create a new pool if it was stale. Here is is the code on the
GremlinClient object:
{{public bool HasOpenConnection =>
(bool)_connectionPool?.FirstConnectionSnapshot?.IsOpen;}}
{{public async Task<ResultSet<T>> SubmitAsync<T>(RequestMessage
requestMessage)}}
{{ {}}
{{ if (!HasOpenConnection)}}
{{ {}}
{{ Debug.WriteLine("=====================================");}}
{{ Debug.WriteLine("new connection pool");}}
{{ var reader = _graphSONReader ?? new GraphSON3Reader();}}
{{ var writer = _graphSONWriter ?? new GraphSON3Writer();}}
{{ var connectionFactory = new ConnectionFactory(_gremlinServer, reader,
writer, _mimeType ?? DefaultMimeType,}}
{{ _webSocketConfiguration);}}
{{ _connectionPool =}}
{{ new ConnectionPool(connectionFactory, _connectionPoolSettings ?? new
ConnectionPoolSettings());}}
{{ }}}{{using (var connection = await
_connectionPool.GetAvailableConnectionAsync().ConfigureAwait(false))}}
{{ {}}
{{ return await
connection.SubmitAsync<T>(requestMessage).ConfigureAwait(false);}}
{{ }}}
{{ }}}
--
This message was sent by Atlassian JIRA
(v7.6.14#76016)