internal LanguageWorkerState CreateWorkerState(WorkerConfig config) { var state = new LanguageWorkerState(); state.Channel = _channelFactory(config, state.Functions, 0); _channelsDictionary[state.Channel.Id] = state.Channel; return(state); }
private LanguageWorkerState CreateWorkerState(string runtime) { var state = new LanguageWorkerState(); WorkerConfig config = _workerConfigs.Where(c => c.Language.Equals(runtime, StringComparison.OrdinalIgnoreCase)).FirstOrDefault(); state.Channel = ChannelFactory(runtime, state.Functions, 0); _workerStates[runtime] = state; return(state); }
public LanguageWorkerState CreateWorkerStateWithExistingChannel(string language, ILanguageWorkerChannel languageWorkerChannel) { WorkerConfig config = _workerConfigs.Where(c => c.Language.Equals(language, StringComparison.OrdinalIgnoreCase)).FirstOrDefault(); var state = new LanguageWorkerState(); state.Channel = languageWorkerChannel; state.Channel.RegisterFunctions(state.Functions); _workerStates[language] = state; return(state); }
private void RestartWorkerChannel(string language, LanguageWorkerState erroredWorkerState) { if (erroredWorkerState.Errors.Count < 3) { erroredWorkerState.Channel = CreateNewChannelWithExistingWorkerState(language, erroredWorkerState); _workerStates[language] = erroredWorkerState; } else { PublishWorkerProcessErrorEvent(language, erroredWorkerState); } }
private void RestartWorkerChannel(string runtime, LanguageWorkerState erroredWorkerState) { if (erroredWorkerState.Errors.Count < 3) { erroredWorkerState.Channel = CreateNewChannelWithExistingWorkerState(runtime, erroredWorkerState); _workerStates[runtime] = erroredWorkerState; } else { _logger.LogDebug("Exceeded language worker restart retry count for runtime:{runtime}", runtime); PublishWorkerProcessErrorEvent(runtime, erroredWorkerState); } }
private void PublishWorkerProcessErrorEvent(string language, LanguageWorkerState erroredWorkerState) { var exMessage = $"Failed to start language worker for: {language}"; var languageWorkerChannelException = (erroredWorkerState.Errors != null && erroredWorkerState.Errors.Count > 0) ? new LanguageWorkerChannelException(exMessage, new AggregateException(erroredWorkerState.Errors.ToList())) : new LanguageWorkerChannelException(exMessage); var errorBlock = new ActionBlock <ScriptInvocationContext>(ctx => { ctx.ResultSource.TrySetException(languageWorkerChannelException); }); _workerStateSubscriptions.Add(erroredWorkerState.Functions.Subscribe(reg => { erroredWorkerState.AddRegistration(reg); reg.InputBuffer.LinkTo(errorBlock); })); _eventManager.Publish(new WorkerProcessErrorEvent(erroredWorkerState.Channel.Id, language, languageWorkerChannelException)); }
public LanguageWorkerState CreateWorkerState(string language) { ILanguageWorkerChannel initializedChannel = _languageWorkerChannelManager.GetChannel(language); if (initializedChannel != null) { return(CreateWorkerStateWithExistingChannel(language, initializedChannel)); } else { var state = new LanguageWorkerState(); WorkerConfig config = _workerConfigs.Where(c => c.Language.Equals(language, StringComparison.OrdinalIgnoreCase)).FirstOrDefault(); state.Channel = ChannelFactory(language, state.Functions, 0); _workerStates[language] = state; return(state); } }
private ILanguageWorkerChannel CreateNewChannelWithExistingWorkerState(string language, LanguageWorkerState erroredWorkerState) { WorkerConfig config = _workerConfigs.Where(c => c.Language.Equals(language, StringComparison.OrdinalIgnoreCase)).FirstOrDefault(); var newWorkerChannel = ChannelFactory(language, erroredWorkerState.Functions, erroredWorkerState.Errors.Count); newWorkerChannel.RegisterFunctions(erroredWorkerState.Functions); return(newWorkerChannel); }