Skip to content

Commit 634ae0e

Browse files
committed
Configure unbounded FunctionTimeout when user specifies -1, and add tests.
1 parent 056d5d4 commit 634ae0e

File tree

2 files changed

+24
-3
lines changed

2 files changed

+24
-3
lines changed

src/WebJobs.Script/Config/ScriptHostOptionsSetup.cs

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -70,13 +70,18 @@ public void Configure(ScriptJobHostOptions options)
7070

7171
private void ConfigureFunctionTimeout(ScriptJobHostOptions options)
7272
{
73-
if (options.FunctionTimeout != null)
73+
if (options.FunctionTimeout == null)
7474
{
75-
ValidateTimeoutValue(options, options.FunctionTimeout);
75+
options.FunctionTimeout = _environment.IsDynamic() ? DefaultFunctionTimeoutDynamic : DefaultFunctionTimeout;
76+
}
77+
else if (!_environment.IsDynamic() && TimeSpan.Compare(options.FunctionTimeout.Value, TimeSpan.FromDays(-1)) == 0)
78+
{
79+
// If a value of -1 is specified on a dedicated host, it should result in an infinite timeout
80+
options.FunctionTimeout = null;
7681
}
7782
else
7883
{
79-
options.FunctionTimeout = _environment.IsDynamic() ? DefaultFunctionTimeoutDynamic : DefaultFunctionTimeout;
84+
ValidateTimeoutValue(options, options.FunctionTimeout);
8085
}
8186
}
8287

test/WebJobs.Script.Tests/Configuration/ScriptHostOptionsSetupTests.cs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,18 @@ public void Configure_NoMaxTimeoutLimits_IfNotDynamic()
158158
Assert.Equal(timeout, options.FunctionTimeout);
159159
}
160160

161+
[Fact]
162+
public void Configure_AppliesInfiniteTimeout_IfNotDynamic()
163+
{
164+
var settings = new Dictionary<string, string>
165+
{
166+
{ ConfigurationPath.Combine(ConfigurationSectionNames.JobHost, "functionTimeout"), "-1" }
167+
};
168+
169+
var options = GetConfiguredOptions(settings);
170+
Assert.Equal(null, options.FunctionTimeout);
171+
}
172+
161173
[Fact]
162174
public void Configure_AppliesTimeoutLimits_IfDynamic()
163175
{
@@ -177,6 +189,10 @@ public void Configure_AppliesTimeoutLimits_IfDynamic()
177189
settings[configPath] = (ScriptHostOptionsSetup.MinFunctionTimeout - TimeSpan.FromSeconds(1)).ToString();
178190
ex = Assert.Throws<ArgumentException>(() => GetConfiguredOptions(settings, environment));
179191
Assert.Equal(expectedMessage, ex.Message);
192+
193+
settings[configPath] = "-1";
194+
ex = Assert.Throws<ArgumentException>(() => GetConfiguredOptions(settings, environment));
195+
Assert.Equal(expectedMessage, ex.Message);
180196
}
181197

182198
[Fact]

0 commit comments

Comments
 (0)