public WebHostRpcWorkerChannelManagerTests() { _eventManager = new ScriptEventManager(); _rpcServer = new TestRpcServer(); _loggerProvider = new TestLoggerProvider(); _loggerFactory = new LoggerFactory(); _testEnvironment = new TestEnvironment(); _loggerFactory.AddProvider(_loggerProvider); _rpcWorkerProcess = new Mock <IWorkerProcess>(); _languageWorkerOptions = new LanguageWorkerOptions { WorkerConfigs = TestHelpers.GetTestWorkerConfigs() }; var applicationHostOptions = new ScriptApplicationHostOptions { IsSelfHost = true, ScriptPath = @"c:\testing\FUNCTIONS-TEST\test$#" }; _optionsMonitor = TestHelpers.CreateOptionsMonitor(applicationHostOptions); _rpcWorkerProcessFactory = new Mock <IRpcWorkerProcessFactory>(); _rpcWorkerProcessFactory.Setup(m => m.Create(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>())).Returns(_rpcWorkerProcess.Object); _testLogger = new TestLogger("WebHostLanguageWorkerChannelManagerTests"); _rpcWorkerChannelFactory = new TestRpcWorkerChannelFactory(_eventManager, _testLogger, _scriptRootPath); _rpcWorkerChannelManager = new WebHostRpcWorkerChannelManager(_eventManager, _testEnvironment, _loggerFactory, _rpcWorkerChannelFactory, _optionsMonitor, new TestMetricsLogger()); }
public TesRpcWorkerChannelManager(IScriptEventManager eventManager, ILogger testLogger, string scriptRootPath, IRpcWorkerChannelFactory testLanguageWorkerChannelFactory) { _eventManager = eventManager; _testLogger = testLogger; _scriptRootPath = scriptRootPath; _testLanguageWorkerChannelFactory = testLanguageWorkerChannelFactory; }
public WebHostLanguageWorkerChannelManager(IScriptEventManager eventManager, IEnvironment environment, ILoggerFactory loggerFactory, IRpcWorkerChannelFactory languageWorkerChannelFactory, IOptionsMonitor <ScriptApplicationHostOptions> applicationHostOptions) { _environment = environment ?? throw new ArgumentNullException(nameof(environment)); _eventManager = eventManager; _loggerFactory = loggerFactory; _languageWorkerChannelFactory = languageWorkerChannelFactory; _logger = loggerFactory.CreateLogger <WebHostLanguageWorkerChannelManager>(); _applicationHostOptions = applicationHostOptions; _shutdownStandbyWorkerChannels = ScheduleShutdownStandbyChannels; _shutdownStandbyWorkerChannels = _shutdownStandbyWorkerChannels.Debounce(milliseconds: 5000); }
public RpcFunctionInvocationDispatcher(IOptions <ScriptJobHostOptions> scriptHostOptions, IMetricsLogger metricsLogger, IEnvironment environment, IApplicationLifetime applicationLifetime, IScriptEventManager eventManager, ILoggerFactory loggerFactory, IRpcWorkerChannelFactory rpcWorkerChannelFactory, IOptions <LanguageWorkerOptions> languageWorkerOptions, IWebHostRpcWorkerChannelManager webHostLanguageWorkerChannelManager, IJobHostRpcWorkerChannelManager jobHostLanguageWorkerChannelManager, IOptions <ManagedDependencyOptions> managedDependencyOptions, IRpcFunctionInvocationDispatcherLoadBalancer functionDispatcherLoadBalancer) { _metricsLogger = metricsLogger; _scriptOptions = scriptHostOptions.Value; _environment = environment; _applicationLifetime = applicationLifetime; _webHostLanguageWorkerChannelManager = webHostLanguageWorkerChannelManager; _jobHostLanguageWorkerChannelManager = jobHostLanguageWorkerChannelManager; _eventManager = eventManager; _workerConfigs = languageWorkerOptions.Value.WorkerConfigs; _managedDependencyOptions = managedDependencyOptions ?? throw new ArgumentNullException(nameof(managedDependencyOptions)); _logger = loggerFactory.CreateLogger <RpcFunctionInvocationDispatcher>(); _rpcWorkerChannelFactory = rpcWorkerChannelFactory; _workerRuntime = _environment.GetEnvironmentVariable(RpcWorkerConstants.FunctionWorkerRuntimeSettingName); var processCount = _environment.GetEnvironmentVariable(RpcWorkerConstants.FunctionsWorkerProcessCountSettingName); _maxProcessCount = (processCount != null && int.Parse(processCount) > 1) ? int.Parse(processCount) : 1; _maxProcessCount = _maxProcessCount > _maxAllowedProcessCount ? _maxAllowedProcessCount : _maxProcessCount; _functionDispatcherLoadBalancer = functionDispatcherLoadBalancer; State = FunctionInvocationDispatcherState.Default; ErrorEventsThreshold = 3 * _maxProcessCount; _workerErrorSubscription = _eventManager.OfType <WorkerErrorEvent>() .Subscribe(WorkerError); _workerRestartSubscription = _eventManager.OfType <WorkerRestartEvent>() .Subscribe(WorkerRestart); _shutdownStandbyWorkerChannels = ShutdownWebhostLanguageWorkerChannels; _shutdownStandbyWorkerChannels = _shutdownStandbyWorkerChannels.Debounce(milliseconds: 5000); }
public FunctionInvocationDispatcherFactory(IOptions <ScriptJobHostOptions> scriptHostOptions, IMetricsLogger metricsLogger, IApplicationLifetime applicationLifetime, IScriptEventManager eventManager, ILoggerFactory loggerFactory, IHttpWorkerChannelFactory httpWorkerChannelFactory, IRpcWorkerChannelFactory rpcWorkerChannelFactory, IOptions <HttpWorkerOptions> httpWorkerOptions, IOptionsMonitor <LanguageWorkerOptions> rpcWorkerOptions, IEnvironment environment, IWebHostRpcWorkerChannelManager webHostLanguageWorkerChannelManager, IJobHostRpcWorkerChannelManager jobHostLanguageWorkerChannelManager, IOptions <ManagedDependencyOptions> managedDependencyOptions, IRpcFunctionInvocationDispatcherLoadBalancer functionDispatcherLoadBalancer, IOptions <WorkerConcurrencyOptions> workerConcurrencyOptions) { if (httpWorkerOptions.Value == null) { throw new ArgumentNullException(nameof(httpWorkerOptions.Value)); } if (httpWorkerOptions.Value.Description != null) { _functionDispatcher = new HttpFunctionInvocationDispatcher(scriptHostOptions, metricsLogger, applicationLifetime, eventManager, loggerFactory, httpWorkerChannelFactory); return; } _functionDispatcher = new RpcFunctionInvocationDispatcher(scriptHostOptions, metricsLogger, environment, applicationLifetime, eventManager, loggerFactory, rpcWorkerChannelFactory, rpcWorkerOptions, webHostLanguageWorkerChannelManager, jobHostLanguageWorkerChannelManager, managedDependencyOptions, functionDispatcherLoadBalancer, workerConcurrencyOptions); }
public RpcFunctionInvocationDispatcher(IOptions <ScriptJobHostOptions> scriptHostOptions, IMetricsLogger metricsLogger, IEnvironment environment, IApplicationLifetime applicationLifetime, IScriptEventManager eventManager, ILoggerFactory loggerFactory, IRpcWorkerChannelFactory rpcWorkerChannelFactory, IOptionsMonitor <LanguageWorkerOptions> languageWorkerOptions, IWebHostRpcWorkerChannelManager webHostLanguageWorkerChannelManager, IJobHostRpcWorkerChannelManager jobHostLanguageWorkerChannelManager, IOptions <ManagedDependencyOptions> managedDependencyOptions, IRpcFunctionInvocationDispatcherLoadBalancer functionDispatcherLoadBalancer, IOptions <WorkerConcurrencyOptions> workerConcurrencyOptions) { _metricsLogger = metricsLogger; _scriptOptions = scriptHostOptions.Value; _environment = environment ?? throw new ArgumentNullException(nameof(environment)); _applicationLifetime = applicationLifetime; _webHostLanguageWorkerChannelManager = webHostLanguageWorkerChannelManager; _jobHostLanguageWorkerChannelManager = jobHostLanguageWorkerChannelManager; _eventManager = eventManager; _workerConfigs = languageWorkerOptions?.CurrentValue?.WorkerConfigs ?? throw new ArgumentNullException(nameof(languageWorkerOptions)); _managedDependencyOptions = managedDependencyOptions ?? throw new ArgumentNullException(nameof(managedDependencyOptions)); _logger = loggerFactory.CreateLogger <RpcFunctionInvocationDispatcher>(); _rpcWorkerChannelFactory = rpcWorkerChannelFactory; _workerRuntime = _environment.GetEnvironmentVariable(RpcWorkerConstants.FunctionWorkerRuntimeSettingName); _functionDispatcherLoadBalancer = functionDispatcherLoadBalancer; _workerConcurrencyOptions = workerConcurrencyOptions; _workerIndexing = Utility.CanWorkerIndex(_workerConfigs, _environment); State = FunctionInvocationDispatcherState.Default; _workerErrorSubscription = _eventManager.OfType <WorkerErrorEvent>().Subscribe(WorkerError); _workerRestartSubscription = _eventManager.OfType <WorkerRestartEvent>().Subscribe(WorkerRestart); _shutdownStandbyWorkerChannels = ShutdownWebhostLanguageWorkerChannels; _shutdownStandbyWorkerChannels = _shutdownStandbyWorkerChannels.Debounce(milliseconds: 5000); _maxProcessCount = new Lazy <Task <int> >(GetMaxProcessCount); }