Beispiel #1
0
        /// <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);
        }
Beispiel #2
0
        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}"));
        }