Skip to content

Commit a3be286

Browse files
authored
Do not start languageworkers when using pooling (#4895)
1 parent 5a4879c commit a3be286

File tree

4 files changed

+36
-2
lines changed

4 files changed

+36
-2
lines changed

src/WebJobs.Script/Environment/EnvironmentExtensions.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,12 @@ public static bool IsPlaceholderModeEnabled(this IEnvironment environment)
4848
return environment.GetEnvironmentVariable(AzureWebsitePlaceholderMode) == "1";
4949
}
5050

51+
public static bool IsLegacyPlaceholderTemplateSite(this IEnvironment environment)
52+
{
53+
string siteName = environment.GetEnvironmentVariable(AzureWebsiteName);
54+
return string.IsNullOrEmpty(siteName) ? false : siteName.Equals(ScriptConstants.LegacyPlaceholderTemplateSiteName, StringComparison.InvariantCultureIgnoreCase);
55+
}
56+
5157
public static bool IsEasyAuthEnabled(this IEnvironment environment)
5258
{
5359
bool.TryParse(environment.GetEnvironmentVariable(EnvironmentSettingNames.EasyAuthEnabled), out bool isEasyAuthEnabled);

src/WebJobs.Script/Rpc/RpcInitializationService.cs

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -150,9 +150,18 @@ private Task InitializeWebHostRuntimeChannelsAsync()
150150
return Task.CompletedTask;
151151
}
152152

153-
private bool ShouldStartInPlaceholderMode()
153+
internal bool ShouldStartInPlaceholderMode()
154154
{
155-
return string.IsNullOrEmpty(_workerRuntime) && _environment.IsPlaceholderModeEnabled();
155+
if (string.IsNullOrEmpty(_workerRuntime) && _environment.IsPlaceholderModeEnabled())
156+
{
157+
if (_environment.IsLinuxHostingEnvironment())
158+
{
159+
return true;
160+
}
161+
// On Windows AppService Env, only start worker processes for legacy template site: FunctionsPlaceholderTemplateSite
162+
return _environment.IsLegacyPlaceholderTemplateSite();
163+
}
164+
return false;
156165
}
157166

158167
// To help with unit tests

src/WebJobs.Script/ScriptConstants.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ public static class ScriptConstants
2222
public const string JobHostMiddlewarePipelineRequestDelegate = "MS_JobHostMiddlewarePipelineRequestDelegate";
2323
public const string HstsMiddlewareRequestDelegate = "MS_HstsMiddlewareRequestDelegate";
2424

25+
public const string LegacyPlaceholderTemplateSiteName = "FunctionsPlaceholderTemplateSite";
26+
2527
public const string LogPropertyPrimaryHostKey = "MS_PrimaryHost";
2628
public const string LogPropertySourceKey = "MS_Source";
2729
public const string LogPropertyFunctionNameKey = "MS_FunctionName";

test/WebJobs.Script.Tests/Rpc/RpcInitializationServiceTests.cs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ public async Task RpcInitializationService_Initializes_RpcServerAndChannels_Wind
6767
var mockEnvironment = new Mock<IEnvironment>();
6868
mockEnvironment.Setup(p => p.GetEnvironmentVariable(EnvironmentSettingNames.AzureWebsitePlaceholderMode)).Returns("1");
6969
mockEnvironment.Setup(p => p.GetEnvironmentVariable(LanguageWorkerConstants.FunctionWorkerRuntimeSettingName)).Returns(string.Empty);
70+
mockEnvironment.Setup(p => p.GetEnvironmentVariable(EnvironmentSettingNames.AzureWebsiteName)).Returns("functionsPlaceholderTemplateSite");
7071

7172
_rpcInitializationService = new RpcInitializationService(_optionsMonitor, mockEnvironment.Object, testRpcServer, _mockLanguageWorkerChannelManager.Object, _logger);
7273
await _rpcInitializationService.StartAsync(CancellationToken.None);
@@ -287,5 +288,21 @@ public async Task RpcInitializationService_TriggerShutdown_KillGetsCalledWhenShu
287288
testRpcServer.Verify(a => a.ShutdownAsync(), Times.Once);
288289
testRpcServer.Verify(a => a.KillAsync(), Times.Once);
289290
}
291+
292+
[Theory]
293+
[InlineData("1", "functionsPlaceholderTemplateSite", "1234", true)]
294+
[InlineData("0", "functionsPlaceholderTemplateSite", "1234", false)]
295+
[InlineData("1", "functionsPlaceholderTemplateSitejava", "1234", false)]
296+
[InlineData("1", "functionsPlaceholderTemplateSite", "", true)]
297+
public void ShouldStartInPlaceholderMode_Returns_ExpectedValue(string placeholderMode, string siteName, string siteInstanaceId, bool expectedResult)
298+
{
299+
Mock<IRpcServer> testRpcServer = new Mock<IRpcServer>();
300+
var mockEnvironment = new Mock<IEnvironment>();
301+
mockEnvironment.Setup(p => p.GetEnvironmentVariable(EnvironmentSettingNames.AzureWebsitePlaceholderMode)).Returns(placeholderMode);
302+
mockEnvironment.Setup(p => p.GetEnvironmentVariable(EnvironmentSettingNames.AzureWebsiteName)).Returns(siteName);
303+
mockEnvironment.Setup(p => p.GetEnvironmentVariable(EnvironmentSettingNames.AzureWebsiteInstanceId)).Returns(siteInstanaceId);
304+
_rpcInitializationService = new RpcInitializationService(_optionsMonitor, mockEnvironment.Object, testRpcServer.Object, _mockLanguageWorkerChannelManager.Object, _logger);
305+
Assert.Equal(_rpcInitializationService.ShouldStartInPlaceholderMode(), expectedResult);
306+
}
290307
}
291308
}

0 commit comments

Comments
 (0)