You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tinkerpop.apache.org by "Stephen Mallette (Jira)" <ji...@apache.org> on 2021/03/26 10:45:00 UTC

[jira] [Commented] (TINKERPOP-2541) .NET SDK (CosmosDb): The server returned status code '500' when status code '101' was expected.

    [ https://issues.apache.org/jira/browse/TINKERPOP-2541?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17309344#comment-17309344 ] 

Stephen Mallette commented on TINKERPOP-2541:
---------------------------------------------

There are a number of open issues related to CosmosDB. Unfortunately, we have a lot of trouble recreating them with Gremlin Server. They simply don't happen with the reference implementation which leads us (TinkerPop) to believe that the issue lies with the CosmosDB server implementation. I suppose that it's possible that CosmosDB's server implementation is "right" and is demonstrating a flaw in our reference implementation, but it's really hard to identify what that is without support from CosmosDB representatives. 

That said, your error message is interesting: "The server returned status code '500' when status code '101' was expected." I have no idea why the client would expect a 101 as that isn't one of our status codes. 

[~florianhockmann] do you have any ideas on any of this? 

> .NET SDK (CosmosDb): The server returned status code '500' when status code '101' was expected.
> -----------------------------------------------------------------------------------------------
>
>                 Key: TINKERPOP-2541
>                 URL: https://issues.apache.org/jira/browse/TINKERPOP-2541
>             Project: TinkerPop
>          Issue Type: Bug
>          Components: dotnet
>    Affects Versions: 3.4.10
>            Reporter: Kirk Marple
>            Priority: Major
>
> Using 3.4.10, .NET SDK, I've been getting a lot of problems talking to CosmosDb lately.
> Some hangs on SubmitAsync (after several successful calls), and sometimes errors just creating the GremlinClient.
> Seems to have cropped more over the last month, where I can reproduce it more often now.  I've tried playing with pool size, etc. and haven't been able to get around it.  
> I'm able to repro it just from my laptop locally when running integration tests against CosmosDb.
> Any thoughts on this?  It's preventing us going into production with our application. 
>  
> {code:java}
> The server returned status code '500' when status code '101' was expected.
> at System.Net.WebSockets.WebSocketHandle.<ConnectAsync>d__13.MoveNext()
> at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
> at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
> at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
> at Gremlin.Net.Driver.WebSocketConnection.<ConnectAsync>d__4.MoveNext()
> at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
> at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
> at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
> at Gremlin.Net.Driver.Connection.<ConnectAsync>d__15.MoveNext()
> at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
> at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
> at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
> at Gremlin.Net.Driver.ConnectionPool.<CreateNewConnectionAsync>d__18.MoveNext()
> at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
> at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
> at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
> at Gremlin.Net.Driver.ConnectionPool.<FillPoolAsync>d__17.MoveNext()
> at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
> at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
> at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
> at Gremlin.Net.Driver.ConnectionPool.<ReplaceDeadConnectionsAsync>d__15.MoveNext()
> at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
> at Gremlin.Net.Process.Utils.WaitUnwrap(Task task)
> at Gremlin.Net.Driver.ConnectionPool..ctor(IConnectionFactory connectionFactory, ConnectionPoolSettings settings)
> at Gremlin.Net.Driver.GremlinClient..ctor(GremlinServer gremlinServer, GraphSONReader graphSONReader, GraphSONWriter graphSONWriter, String mimeType, ConnectionPoolSettings connectionPoolSettings, Action`1 webSocketConfiguration, String sessionId)
> at Unstruk.Frameworks.Data.Graphs.GraphHelpers.<>c_DisplayClass4_0.<CreateGremlinClient>b_3() in D:\a\1\s\src\Unstruk.Frameworks.Data\GraphHelpers.cs:line 90
> at Polly.Policy.<>c_DisplayClass126_0`1.<ExecuteAndCapture>b_0(Context ctx, CancellationToken ct)
> at Polly.Retry.RetryEngine.Implementation[TResult](Func`3 action, Context context, CancellationToken cancellationToken, ExceptionPredicates shouldRetryExceptionPredicates, ResultPredicates`1 shouldRetryResultPredicates, Action`4 onRetry, Int32 permittedRetryCount, IEnumerable`1 sleepDurationsEnumerable, Func`4 sleepDurationProvider)
> at Polly.Retry.RetryPolicy.Implementation[TResult](Func`3 action, Context context, CancellationToken cancellationToken)
> at Polly.Policy.Execute[TResult](Func`3 action, Context context, CancellationToken cancellationToken)
> at Polly.Policy.ExecuteAndCapture[TResult](Func`3 action, Context context, CancellationToken cancellationToken)
> {code}
> Here's my helper method for creating the client, which I wrapped with Polly retry, and it still failed.
> {code:java}
>         private const int DEFAULT_POOL_SIZE = 8;
>         private const int DEFAULT_INPROCESS_PER_CONNECTION = 32;
>         public static GremlinClient CreateGremlinClient(ILogger logger, GraphSettings settings, string collectionName)
>         {
>             const int DEFAULT_RETRY_COUNT = 5;
>             const float RETRY_SEED = 1.5F;
>             if (String.IsNullOrEmpty(settings.Location))
>                 throw new InvalidOperationException("Invalid CosmosDB graph server name.");
>             if (String.IsNullOrEmpty(settings.Key))
>                 throw new InvalidOperationException("Invalid CosmosDB graph access key.");
>             if (String.IsNullOrEmpty(settings.DatabaseId))
>                 throw new InvalidOperationException("Invalid CosmosDB graph database id.");
>             if (String.IsNullOrEmpty(collectionName))
>                 throw new InvalidOperationException("Invalid CosmosDB graph collection name.");
>             var sw = Stopwatch.StartNew();
>             var uri = new Uri(settings.Location);
>             uri = ConvertGremlinEndpoint(uri);
>             var server = new GremlinServer(uri.Host, 443, true, $"/dbs/{settings.DatabaseId}/colls/{collectionName}", settings.Key);
>             var connectionPoolSettings = new ConnectionPoolSettings
>             {
>                 PoolSize = DEFAULT_POOL_SIZE,
>                 MaxInProcessPerConnection = DEFAULT_INPROCESS_PER_CONNECTION
>             };
>             var webSocketConfiguration = new Action<ClientWebSocketOptions>(options =>
>             {
>                 //options.KeepAliveInterval = TimeSpan.FromSeconds(10);
>             });
>             int attempt = 1;
>             var result = Policy
>                 .Handle<ResponseException>()
>                 .WaitAndRetry(DEFAULT_RETRY_COUNT,
>                     retryAttempt => TimeSpan.FromSeconds(Math.Pow(RETRY_SEED, retryAttempt)),
>                     onRetry: (e, delay) =>
>                     {
> #if DEBUG_SERVICE_GRAPH
>                         logger.LogWarning($"Failed to create Gremlin client, attempt [{attempt}]. Trying again in [{delay}].  {e.Message}");
> #endif
>                         attempt++;
>                     })
>                 .ExecuteAndCapture(() =>
>                 {
>                     return new GremlinClient(server, new GraphSON2Reader(), new GraphSON2Writer(), GremlinClient.GraphSON2MimeType, connectionPoolSettings, webSocketConfiguration);
>                 });
>             if (result.Outcome == OutcomeType.Failure)
>                 throw new InvalidOperationException($"Failed to create Gremlin Client.", result.FinalException);
>             logger.LogDebug($"Created Gremlin client, location [{settings.Location}], database [{settings.DatabaseId}], collection [{collectionName}], took [{sw.Elapsed}].");
>             return result.Result;
>         }
> {code}



--
This message was sent by Atlassian Jira
(v8.3.4#803005)