/// <inheritdoc /> protected override async Task <BoolResult> StartupCoreAsync(OperationContext context) { BoolResult result = await PreStartupAsync(context); var rpcConfiguration = Configuration.RpcConfiguration; if (result.Succeeded) { _grpcClient = new GrpcContentClient(SessionTracer, FileSystem, rpcConfiguration.GrpcPort, Configuration.Scenario, rpcConfiguration.HeartbeatInterval); result = await Configuration.RetryPolicy.ExecuteAsync(() => _grpcClient.StartupAsync(context, waitMs: 0)); if (!result) { await Configuration.RetryPolicy.ExecuteAsync(() => _grpcClient.ShutdownAsync(context)).ThrowIfFailure(); } } if (!result) { await PostShutdownAsync(context).ThrowIfFailure(); return(result); } return(result); }
private async Task <BoolResult> CheckGrpcPortIsOpen(Context context, uint grpcPort) { var client = new GrpcContentClient( new ServiceClientContentSessionTracer(nameof(CheckGrpcPortIsOpen)), FileSystem, new ServiceClientRpcConfiguration((int)grpcPort), scenario: nameof(CheckGrpcPortIsOpen)); var sw = Stopwatch.StartNew(); while (sw.ElapsedMilliseconds < ReadyWaitMs * 5) { try { var startupResult = await client.StartupAsync(context); if (startupResult.Succeeded) { return(BoolResult.Success); } } catch (ClientCanRetryException) { } // Wait a short time so we don't churn await Task.Delay(100); } return(new BoolResult($"Failed to detect active grpc client for {grpcPort}")); }