Beispiel #1
0
        public async Task StartWorkerAsync(DFrameOptions options, int processCount, IServiceProvider provider, IFailSignal failSignal, CancellationToken cancellationToken)
        {
            _failSignal = failSignal;

            Console.WriteLine($"scale out workers {_env.ScalingType}. {_ns}/{_env.Name} ({processCount} pods)");

            // confirm kubernetes master can connect with cluster api.
            Console.WriteLine($"checking cluster Endpoint health.");
            var healthy = await _operations.TryConnectClusterEndpointAsync(_env.ClusterEndpointHealthRetry, TimeSpan.FromSeconds(_env.ClusterEndpointHealthInterval), cancellationToken);

            if (!healthy)
            {
                Console.WriteLine($"cluster endpoint is unhealthy, quiting scale out.");
                _failSignal.TrySetException(new KubernetesException("Could not connect to Kubernetes Cluster Endpoint. Make sure pod can communicate with cluster api."));
            }
            else
            {
                // create worker resource
                switch (_env.ScalingType)
                {
                case ScalingType.Deployment:
                    await ScaleoutDeploymentAsync(processCount, options.WorkerConnectToHost, options.WorkerConnectToPort, cancellationToken);

                    break;

                case ScalingType.Job:
                    await ScaleoutJobAsync(processCount, options.WorkerConnectToHost, options.WorkerConnectToPort, cancellationToken);

                    break;

                default:
                    throw new ArgumentOutOfRangeException(nameof(ScalingType));
                }
            }
        }
Beispiel #2
0
        public async Task StartWorkerAsync(DFrameOptions options, int processCount, IServiceProvider provider, IFailSignal failSignal, CancellationToken cancellationToken)
        {
            this.failSignal = failSignal;

            var location = Assembly.GetEntryAssembly().Location;

            var cmd = $"dotnet \"{location}\" --worker-flag";

            for (int i = 0; i < processCount; i++)
            {
                var startProcessTask = ProcessX.StartAsync(cmd);
                WriteAll(startProcessTask);
            }
        }
        public Task StartWorkerAsync(DFrameOptions options, int processCount, IServiceProvider provider, IFailSignal failSignal, CancellationToken cancellationToken)
        {
            this.failSignal         = failSignal;
            cancellationTokenSource = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken);

            var tasks = new Task[processCount];

            for (int i = 0; i < processCount; i++)
            {
                tasks[i] = Core(provider, options, cancellationTokenSource.Token);
            }

            this.tasks = Task.WhenAll(tasks);
            return(Task.CompletedTask);
        }