internal LanguageWorkerState CreateWorkerState(WorkerConfig config)
        {
            var state = new LanguageWorkerState();

            state.Channel = _channelFactory(config, state.Functions, 0);
            _channelsDictionary[state.Channel.Id] = state.Channel;
            return(state);
        }
示例#2
0
        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);
        }
示例#3
0
        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);
     }
 }
示例#5
0
 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);
     }
 }
示例#6
0
        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);
            }
        }
示例#8
0
        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);
        }