private async Task <TResult> ExecuteOperation <TRequest, TResult>(BaseOperation <TRequest, TResult> operation) where TRequest : ZooKeeperRequest where TResult : ZooKeeperResult { TResult result; try { var client = await clientHolder.GetConnectedClient().ConfigureAwait(false); if (client == null) { result = operation.CreateUnsuccessfulResult( clientHolder.ConnectionState == ConnectionState.Died ? ZooKeeperStatus.Died : ZooKeeperStatus.NotConnected, null); } else { result = await operation.Execute(client).ConfigureAwait(false); } } catch (KeeperException e) { result = operation.CreateUnsuccessfulResult(e.ToZooKeeperStatus(), e); } catch (ArgumentException e) { result = operation.CreateUnsuccessfulResult(ZooKeeperStatus.BadArguments, e); } catch (Exception e) { result = operation.CreateUnsuccessfulResult(ZooKeeperStatus.UnknownError, e); } LogResult(operation.Request, result); return(result); }
protected static void WaitForNewConnectedClient(ClientHolder holder) { holder.GetConnectedClient().ShouldCompleteIn(DefaultTimeout).Should().NotBe(null); holder.ConnectionState.Should().Be(ConnectionState.Connected); }