Skip to content

Commit

Permalink
Port timeout fix (#2245)
Browse files Browse the repository at this point in the history
* Port timeout fix #2221
Since Timeout is now on the JobHost, function generator doesn't need to set individual TimeoutAttributes set anymore.

Update SDK nuget to 3.0.0-beta4-11124 to pick up SDK support for timeouts.

* update nugets
  • Loading branch information
MikeStall authored Dec 21, 2017
1 parent 5dbb928 commit 5867f55
Show file tree
Hide file tree
Showing 5 changed files with 29 additions and 18 deletions.
10 changes: 5 additions & 5 deletions src/WebJobs.Script.WebHost/WebJobs.Script.WebHost.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -37,13 +37,13 @@
<PackageReference Include="Microsoft.Azure.AppService.Proxy.Client.Contract" Version="0.3.1.1">
<NoWarn>NU1701</NoWarn>
</PackageReference>
<PackageReference Include="Microsoft.Azure.WebJobs" Version="3.0.0-beta4-11117" />
<PackageReference Include="Microsoft.Azure.WebJobs.Extensions" Version="3.0.0-beta4-10577" />
<PackageReference Include="Microsoft.Azure.WebJobs.Extensions.Http" Version="3.0.0-beta4-10577">
<PackageReference Include="Microsoft.Azure.WebJobs" Version="3.0.0-beta4-11124" />
<PackageReference Include="Microsoft.Azure.WebJobs.Extensions" Version="3.0.0-beta4-10578" />
<PackageReference Include="Microsoft.Azure.WebJobs.Extensions.Http" Version="3.0.0-beta4-10578">
<NoWarn>NU1701</NoWarn>
</PackageReference>
<PackageReference Include="Microsoft.Azure.WebJobs.Logging" Version="3.0.0-beta4-11117" />
<PackageReference Include="Microsoft.Azure.WebJobs.Logging.ApplicationInsights" Version="3.0.0-beta4-11117" />
<PackageReference Include="Microsoft.Azure.WebJobs.Logging" Version="3.0.0-beta4-11124" />
<PackageReference Include="Microsoft.Azure.WebJobs.Logging.ApplicationInsights" Version="3.0.0-beta4-11124" />
<PackageReference Include="Microsoft.Azure.WebSites.DataProtection" Version="2.1.88-alpha" />
<PackageReference Include="WindowsAzure.Storage" Version="8.6.0" />
<PackageReference Include="StyleCop.Analyzers" Version="1.1.0-beta004">
Expand Down
19 changes: 17 additions & 2 deletions src/WebJobs.Script/Host/ScriptHost.cs
Original file line number Diff line number Diff line change
Expand Up @@ -501,7 +501,7 @@ public void Initialize()

// read all script functions and apply to JobHostConfiguration
Collection<FunctionDescriptor> functions = GetFunctionDescriptors(functionMetadata);
Collection<CustomAttributeBuilder> typeAttributes = CreateTypeAttributes(ScriptConfig);
Collection<CustomAttributeBuilder> typeAttributes = new Collection<CustomAttributeBuilder>();
string typeName = string.Format(CultureInfo.InvariantCulture, "{0}.{1}", GeneratedTypeNamespace, GeneratedTypeName);

string generatingMsg = string.Format(CultureInfo.InvariantCulture, "Generating {0} job function(s)", functions.Count);
Expand Down Expand Up @@ -818,6 +818,21 @@ private void TraceFileChangeRestart(string changeDescription, string changeType,
Logger.LogInformation(signalMessage);
}

// Create a TimeoutConfiguration specified by scriptConfig knobs; else null.
internal static JobHostFunctionTimeoutConfiguration CreateTimeoutConfiguration(ScriptHostConfiguration scriptConfig)
{
if (scriptConfig.FunctionTimeout == null)
{
return null;
}
return new JobHostFunctionTimeoutConfiguration
{
Timeout = scriptConfig.FunctionTimeout.Value,
ThrowOnTimeout = true,
TimeoutWhileDebugging = true
};
}

internal static Collection<CustomAttributeBuilder> CreateTypeAttributes(ScriptHostConfiguration scriptConfig)
{
Collection<CustomAttributeBuilder> customAttributes = new Collection<CustomAttributeBuilder>();
Expand Down Expand Up @@ -1509,7 +1524,6 @@ internal static void ApplyConfiguration(JObject config, ScriptHostConfiguration
}
}


if (config.TryGetValue("functionTimeout", out value))
{
TimeSpan requestedTimeout = TimeSpan.Parse((string)value, CultureInfo.InvariantCulture);
Expand All @@ -1522,6 +1536,7 @@ internal static void ApplyConfiguration(JObject config, ScriptHostConfiguration
}

scriptConfig.FunctionTimeout = requestedTimeout;
scriptConfig.HostConfig.FunctionTimeout = ScriptHost.CreateTimeoutConfiguration(scriptConfig);
}
else if (ScriptSettingsManager.Instance.IsDynamicSku)
{
Expand Down
10 changes: 5 additions & 5 deletions src/WebJobs.Script/WebJobs.Script.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -25,13 +25,13 @@
<PackageReference Include="Microsoft.Azure.Functions.NodeJsWorker" Version="1.0.0-beta1-10026">
<PrivateAssets>None</PrivateAssets>
</PackageReference>
<PackageReference Include="Microsoft.Azure.WebJobs" Version="3.0.0-beta4-11117" />
<PackageReference Include="Microsoft.Azure.WebJobs.Extensions" Version="3.0.0-beta4-10577" />
<PackageReference Include="Microsoft.Azure.WebJobs.Extensions.Http" Version="3.0.0-beta4-10577">
<PackageReference Include="Microsoft.Azure.WebJobs" Version="3.0.0-beta4-11124" />
<PackageReference Include="Microsoft.Azure.WebJobs.Extensions" Version="3.0.0-beta4-10578" />
<PackageReference Include="Microsoft.Azure.WebJobs.Extensions.Http" Version="3.0.0-beta4-10578">
<NoWarn>NU1701</NoWarn>
</PackageReference>
<PackageReference Include="Microsoft.Azure.WebJobs.Logging" Version="3.0.0-beta4-11117" />
<PackageReference Include="Microsoft.Azure.WebJobs.Logging.ApplicationInsights" Version="3.0.0-beta4-11117" />
<PackageReference Include="Microsoft.Azure.WebJobs.Logging" Version="3.0.0-beta4-11124" />
<PackageReference Include="Microsoft.Azure.WebJobs.Logging.ApplicationInsights" Version="3.0.0-beta4-11124" />
<PackageReference Include="Microsoft.Build" Version="15.3.409" />
<PackageReference Include="Microsoft.CodeAnalysis.CSharp.Scripting" Version="2.4.0" />
<PackageReference Include="Microsoft.Extensions.Logging" Version="2.0.0" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,17 +44,13 @@ public async Task Generate_EndToEnd()
// Get the Type Attributes (in this case, a TimeoutAttribute)
ScriptHostConfiguration scriptConfig = new ScriptHostConfiguration();
scriptConfig.FunctionTimeout = TimeSpan.FromMinutes(5);
Collection<CustomAttributeBuilder> typeAttributes = ScriptHost.CreateTypeAttributes(scriptConfig);
Collection<CustomAttributeBuilder> typeAttributes = new Collection<CustomAttributeBuilder>();

// generate the Type
Type functionType = FunctionGenerator.Generate("TestScriptHost", "TestFunctions", typeAttributes, functions);

// verify the generated function
MethodInfo method = functionType.GetMethod("TimerFunction");
TimeoutAttribute timeoutAttribute = (TimeoutAttribute)functionType.GetCustomAttributes().Single();
Assert.Equal(TimeSpan.FromMinutes(5), timeoutAttribute.Timeout);
Assert.True(timeoutAttribute.ThrowOnTimeout);
Assert.True(timeoutAttribute.TimeoutWhileDebugging);
ParameterInfo triggerParameter = method.GetParameters()[0];
TimerTriggerAttribute triggerAttribute = triggerParameter.GetCustomAttribute<TimerTriggerAttribute>();
Assert.NotNull(triggerAttribute);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ public void Generate_WithMultipleOutParameters()
// Make sure we don't generate a TimeoutAttribute if FunctionTimeout is null.
ScriptHostConfiguration scriptConfig = new ScriptHostConfiguration();
scriptConfig.FunctionTimeout = null;
Collection<CustomAttributeBuilder> typeAttributes = ScriptHost.CreateTypeAttributes(scriptConfig);
Collection<CustomAttributeBuilder> typeAttributes = new Collection<CustomAttributeBuilder>();

// generate the Type
Type functionType = FunctionGenerator.Generate("TestScriptHost", "TestFunctions", typeAttributes, functions);
Expand Down

0 comments on commit 5867f55

Please sign in to comment.