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)); } } }
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); }