Skip to content

Commit 2db3b7e

Browse files
committed
Resetting root configuration on specialization
1 parent c10b8d7 commit 2db3b7e

File tree

2 files changed

+45
-1
lines changed

2 files changed

+45
-1
lines changed

src/WebJobs.Script.WebHost/Standby/StandbyManager.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
using Microsoft.AspNetCore.Http;
1111
using Microsoft.Azure.WebJobs.Logging;
1212
using Microsoft.Azure.WebJobs.Script.Extensions;
13+
using Microsoft.Extensions.Configuration;
1314
using Microsoft.Extensions.FileProviders;
1415
using Microsoft.Extensions.Logging;
1516
using Microsoft.Extensions.Options;
@@ -25,17 +26,20 @@ public class StandbyManager : IStandbyManager
2526
private readonly IScriptHostManager _scriptHostManager;
2627
private readonly IOptionsMonitor<ScriptApplicationHostOptions> _options;
2728
private readonly Lazy<Task> _specializationTask;
29+
private readonly IConfigurationRoot _configuration;
2830
private readonly ILogger _logger;
2931
private static CancellationTokenSource _standbyCancellationTokenSource = new CancellationTokenSource();
3032
private static IChangeToken _standbyChangeToken = new CancellationChangeToken(_standbyCancellationTokenSource.Token);
3133
private static SemaphoreSlim _semaphore = new SemaphoreSlim(1, 1);
3234

33-
public StandbyManager(IScriptHostManager scriptHostManager, IOptionsMonitor<ScriptApplicationHostOptions> options, ILoggerFactory loggerFactory)
35+
public StandbyManager(IScriptHostManager scriptHostManager, IConfiguration configuration, IOptionsMonitor<ScriptApplicationHostOptions> options, ILoggerFactory loggerFactory)
3436
{
3537
_scriptHostManager = scriptHostManager ?? throw new ArgumentNullException(nameof(scriptHostManager));
3638
_options = options ?? throw new ArgumentNullException(nameof(options));
3739
_logger = loggerFactory.CreateLogger(LogCategories.Startup);
3840
_specializationTask = new Lazy<Task>(SpecializeHostCoreAsync, LazyThreadSafetyMode.ExecutionAndPublication);
41+
42+
_configuration = configuration as IConfigurationRoot;
3943
}
4044

4145
public static IChangeToken ChangeToken => _standbyChangeToken;
@@ -47,6 +51,9 @@ public Task SpecializeHostAsync()
4751

4852
public async Task SpecializeHostCoreAsync()
4953
{
54+
// Trigger a configuration reload to pick up all current settings
55+
_configuration?.Reload();
56+
5057
NotifyChange();
5158

5259
await _scriptHostManager.RestartHostAsync();
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
// Copyright (c) .NET Foundation. All rights reserved.
2+
// Licensed under the MIT License. See License.txt in the project root for license information.
3+
4+
using System;
5+
using System.Collections.Generic;
6+
using System.Text;
7+
using System.Threading.Tasks;
8+
using Microsoft.Azure.WebJobs.Script.WebHost;
9+
using Microsoft.Extensions.Configuration;
10+
using Microsoft.Extensions.Logging;
11+
using Microsoft.Extensions.Options;
12+
using Moq;
13+
using Xunit;
14+
15+
namespace Microsoft.Azure.WebJobs.Script.Tests
16+
{
17+
public class StandbyManagerTests
18+
{
19+
[Fact]
20+
public async Task Specialize_ResetsConfiguration()
21+
{
22+
var mockHostManager = new Mock<IScriptHostManager>();
23+
mockHostManager.Setup(m => m.State)
24+
.Returns(ScriptHostState.Running);
25+
26+
var mockConfiguration = new Mock<IConfigurationRoot>();
27+
var mockOptionsMonitor = new Mock<IOptionsMonitor<ScriptApplicationHostOptions>>();
28+
var mockLoggerFactory = new Mock<ILoggerFactory>();
29+
30+
var manager = new StandbyManager(mockHostManager.Object, mockConfiguration.Object, mockOptionsMonitor.Object, mockLoggerFactory.Object);
31+
32+
await manager.SpecializeHostAsync();
33+
34+
mockConfiguration.Verify(c => c.Reload());
35+
}
36+
}
37+
}

0 commit comments

Comments
 (0)