public void SendFunctionLoadRequests(ManagedDependencyOptions managedDependencyOptions)
 {
     if (_functions != null)
     {
         foreach (FunctionMetadata metadata in _functions.OrderBy(metadata => metadata.IsDisabled))
         {
             SendFunctionLoadRequest(metadata, managedDependencyOptions);
         }
     }
 }
        internal void SendFunctionLoadRequest(FunctionMetadata metadata, ManagedDependencyOptions managedDependencyOptions)
        {
            _functionLoadRequestResponseEvent = _metricsLogger.LatencyEvent(MetricEventNames.FunctionLoadRequestResponse);
            _workerChannelLogger.LogDebug("Sending FunctionLoadRequest for function:{functionName} with functionId:{id}", metadata.Name, metadata.FunctionId);

            // send a load request for the registered function
            SendStreamingMessage(new StreamingMessage
            {
                FunctionLoadRequest = GetFunctionLoadRequest(metadata, managedDependencyOptions)
            });
        }
        public void Test_ManagedDependencyOptionsSetup_Empty_Or_No_ManagedDependencies_InHostJson(string hostJson)
        {
            File.WriteAllText(_hostJsonFilePath, hostJson);
            Assert.True(File.Exists(_hostJsonFilePath));
            var managedDependencyOptions = new ManagedDependencyOptions();
            var configuration            = BuildHostJsonConfiguration();
            ManagedDependencyOptionsSetup managedDependencyOptionsSetup = new ManagedDependencyOptionsSetup(configuration);

            managedDependencyOptionsSetup.Configure(managedDependencyOptions);
            Assert.True(managedDependencyOptions.Enabled == false);
        }
示例#4
0
 public void SendFunctionLoadRequests(ManagedDependencyOptions managedDependencyOptions, TimeSpan?functionTimeout)
 {
     if (_functions != null)
     {
         if (functionTimeout.HasValue)
         {
             _functionLoadTimeout = functionTimeout.Value > _functionLoadTimeout ? functionTimeout.Value : _functionLoadTimeout;
             _eventSubscriptions.Add(_inboundWorkerEvents.Where(msg => msg.MessageType == MsgType.FunctionLoadResponse)
                                     .Timeout(_functionLoadTimeout)
                                     .Take(_functions.Count())
                                     .Subscribe((msg) => LoadResponse(msg.Message.FunctionLoadResponse), HandleWorkerFunctionLoadError));
         }
         else
         {
             _eventSubscriptions.Add(_inboundWorkerEvents.Where(msg => msg.MessageType == MsgType.FunctionLoadResponse)
                                     .Subscribe((msg) => LoadResponse(msg.Message.FunctionLoadResponse), HandleWorkerFunctionLoadError));
         }
         foreach (FunctionMetadata metadata in _functions.OrderBy(metadata => metadata.IsDisabled()))
         {
             SendFunctionLoadRequest(metadata, managedDependencyOptions);
         }
     }
 }
        public void SendFunctionLoadRequests(ManagedDependencyOptions managedDependencyOptions, TimeSpan?functionTimeout)
        {
            if (_functions != null)
            {
                if (functionTimeout.HasValue)
                {
                    _functionLoadTimeout = functionTimeout.Value > _functionLoadTimeout ? functionTimeout.Value : _functionLoadTimeout;
                    _eventSubscriptions.Add(_inboundWorkerEvents.Where(msg => msg.MessageType == MsgType.FunctionLoadResponse)
                                            .Timeout(_functionLoadTimeout)
                                            .Take(_functions.Count())
                                            .Subscribe((msg) => LoadResponse(msg.Message.FunctionLoadResponse), HandleWorkerFunctionLoadError));
                }
                else
                {
                    _eventSubscriptions.Add(_inboundWorkerEvents.Where(msg => msg.MessageType == MsgType.FunctionLoadResponse)
                                            .Subscribe((msg) => LoadResponse(msg.Message.FunctionLoadResponse), HandleWorkerFunctionLoadError));
                }

                // Load Request is also sent for disabled function as it is invocable using the portal and admin endpoints
                // Loading disabled functions at the end avoids unnecessary performance issues. Refer PR #5072 and commit #38b57883be28524fa6ee67a457fa47e96663094c
                _functions = _functions.OrderBy(metadata => metadata.IsDisabled());

                // Check if the worker supports this feature
                bool capabilityEnabled = !string.IsNullOrEmpty(_workerCapabilities.GetCapabilityState(RpcWorkerConstants.AcceptsListOfFunctionLoadRequests));
                if (capabilityEnabled)
                {
                    SendFunctionLoadRequestCollection(_functions, managedDependencyOptions);
                }
                else
                {
                    foreach (FunctionMetadata metadata in _functions)
                    {
                        SendFunctionLoadRequest(metadata, managedDependencyOptions);
                    }
                }
            }
        }
        internal FunctionLoadRequest GetFunctionLoadRequest(FunctionMetadata metadata, ManagedDependencyOptions managedDependencyOptions)
        {
            FunctionLoadRequest request = new FunctionLoadRequest()
            {
                FunctionId = metadata.FunctionId,
                Metadata   = new RpcFunctionMetadata()
                {
                    Name       = metadata.Name,
                    Directory  = metadata.FunctionDirectory ?? string.Empty,
                    EntryPoint = metadata.EntryPoint ?? string.Empty,
                    ScriptFile = metadata.ScriptFile ?? string.Empty,
                    IsProxy    = metadata.IsProxy
                }
            };

            if (managedDependencyOptions != null && managedDependencyOptions.Enabled)
            {
                _workerChannelLogger?.LogDebug($"Adding dependency download request to {_workerConfig.Description.Language} language worker");
                request.ManagedDependencyEnabled = managedDependencyOptions.Enabled;
            }

            foreach (var binding in metadata.Bindings)
            {
                BindingInfo bindingInfo = binding.ToBindingInfo();

                request.Metadata.Bindings.Add(binding.Name, bindingInfo);
            }
            return(request);
        }
        internal FunctionLoadRequestCollection GetFunctionLoadRequestCollection(IEnumerable <FunctionMetadata> functions, ManagedDependencyOptions managedDependencyOptions)
        {
            var functionLoadRequestCollection = new FunctionLoadRequestCollection();

            foreach (FunctionMetadata metadata in functions)
            {
                var functionLoadRequest = GetFunctionLoadRequest(metadata, managedDependencyOptions);
                functionLoadRequestCollection.FunctionLoadRequests.Add(functionLoadRequest);
            }

            return(functionLoadRequestCollection);
        }
        internal void SendFunctionLoadRequestCollection(IEnumerable <FunctionMetadata> functions, ManagedDependencyOptions managedDependencyOptions)
        {
            _functionLoadRequestResponseEvent = _metricsLogger.LatencyEvent(MetricEventNames.FunctionLoadRequestResponse);

            FunctionLoadRequestCollection functionLoadRequestCollection = GetFunctionLoadRequestCollection(functions, managedDependencyOptions);

            _workerChannelLogger.LogDebug("Sending FunctionLoadRequestCollection with number of functions:'{count}'", functionLoadRequestCollection.FunctionLoadRequests.Count);

            // send load requests for the registered functions
            SendStreamingMessage(new StreamingMessage
            {
                FunctionLoadRequestCollection = functionLoadRequestCollection
            });
        }
 public void SendFunctionLoadRequests(ManagedDependencyOptions managedDependencies)
 {
     _testLogger.LogInformation("RegisterFunctions called");
 }