private ILanguageWorkerChannel CreateTestChannel(string workerId, string language) { var testChannel = _languageWorkerChannelManager.CreateLanguageWorkerChannel(workerId, _scriptRootPath, language, null, null, 0); // Generate event to mock language worker response RpcChannelReadyEvent javarReadyEvent = new RpcChannelReadyEvent(workerId, language, testChannel, "testVersion", _capabilities); _eventManager.Publish(javarReadyEvent); return(testChannel); }
private async Task InitializeLanguageWorkerChannel(string language, string scriptRootPath) { try { string workerId = Guid.NewGuid().ToString(); _logger.LogInformation("Creating language worker channel for runtime:{runtime}", language); ILanguageWorkerChannel languageWorkerChannel = CreateLanguageWorkerChannel(workerId, scriptRootPath, language, null, null, 0); languageWorkerChannel.StartWorkerProcess(); IObservable <RpcChannelReadyEvent> rpcChannelReadyEvent = _eventManager.OfType <RpcChannelReadyEvent>() .Where(msg => msg.Language == language).Timeout(workerInitTimeout); // Wait for response from language worker process RpcChannelReadyEvent readyEvent = await rpcChannelReadyEvent.FirstAsync(); } catch (Exception ex) { throw new HostInitializationException($"Failed to start Language Worker Channel for language :{language}", ex); } }
internal void PublishRpcChannelReadyEvent(RpcEvent initEvent) { _startLatencyMetric?.Dispose(); _startLatencyMetric = null; _initMessage = initEvent.Message.WorkerInitResponse; if (_initMessage.Result.IsFailure(out Exception exc)) { HandleWorkerError(exc); return; } if (_functionRegistrations == null) { RpcChannelReadyEvent readyEvent = new RpcChannelReadyEvent(_workerId, _workerConfig.Language, this, _initMessage.WorkerVersion, _initMessage.Capabilities); _eventManager.Publish(readyEvent); return; } RegisterFunctions(_functionRegistrations); }
private void AddOrUpdateWorkerChannels(RpcChannelReadyEvent rpcChannelReadyEvent) { _logger.LogInformation("Adding language worker channel for runtime: {language}.", rpcChannelReadyEvent.Language); _workerChannels.Add(rpcChannelReadyEvent.Language, rpcChannelReadyEvent.LanguageWorkerChannel); }