Skip to content

Commit

Permalink
Resetting root configuration on specialization
Browse files Browse the repository at this point in the history
  • Loading branch information
fabiocav committed Aug 29, 2018
1 parent c10b8d7 commit 2db3b7e
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 1 deletion.
9 changes: 8 additions & 1 deletion src/WebJobs.Script.WebHost/Standby/StandbyManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
using Microsoft.AspNetCore.Http;
using Microsoft.Azure.WebJobs.Logging;
using Microsoft.Azure.WebJobs.Script.Extensions;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.FileProviders;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
Expand All @@ -25,17 +26,20 @@ public class StandbyManager : IStandbyManager
private readonly IScriptHostManager _scriptHostManager;
private readonly IOptionsMonitor<ScriptApplicationHostOptions> _options;
private readonly Lazy<Task> _specializationTask;
private readonly IConfigurationRoot _configuration;
private readonly ILogger _logger;
private static CancellationTokenSource _standbyCancellationTokenSource = new CancellationTokenSource();
private static IChangeToken _standbyChangeToken = new CancellationChangeToken(_standbyCancellationTokenSource.Token);
private static SemaphoreSlim _semaphore = new SemaphoreSlim(1, 1);

public StandbyManager(IScriptHostManager scriptHostManager, IOptionsMonitor<ScriptApplicationHostOptions> options, ILoggerFactory loggerFactory)
public StandbyManager(IScriptHostManager scriptHostManager, IConfiguration configuration, IOptionsMonitor<ScriptApplicationHostOptions> options, ILoggerFactory loggerFactory)
{
_scriptHostManager = scriptHostManager ?? throw new ArgumentNullException(nameof(scriptHostManager));
_options = options ?? throw new ArgumentNullException(nameof(options));
_logger = loggerFactory.CreateLogger(LogCategories.Startup);
_specializationTask = new Lazy<Task>(SpecializeHostCoreAsync, LazyThreadSafetyMode.ExecutionAndPublication);

_configuration = configuration as IConfigurationRoot;
}

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

public async Task SpecializeHostCoreAsync()
{
// Trigger a configuration reload to pick up all current settings
_configuration?.Reload();

NotifyChange();

await _scriptHostManager.RestartHostAsync();
Expand Down
37 changes: 37 additions & 0 deletions test/WebJobs.Script.Tests/StandbyManagerTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.

using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Azure.WebJobs.Script.WebHost;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using Moq;
using Xunit;

namespace Microsoft.Azure.WebJobs.Script.Tests
{
public class StandbyManagerTests
{
[Fact]
public async Task Specialize_ResetsConfiguration()
{
var mockHostManager = new Mock<IScriptHostManager>();
mockHostManager.Setup(m => m.State)
.Returns(ScriptHostState.Running);

var mockConfiguration = new Mock<IConfigurationRoot>();
var mockOptionsMonitor = new Mock<IOptionsMonitor<ScriptApplicationHostOptions>>();
var mockLoggerFactory = new Mock<ILoggerFactory>();

var manager = new StandbyManager(mockHostManager.Object, mockConfiguration.Object, mockOptionsMonitor.Object, mockLoggerFactory.Object);

await manager.SpecializeHostAsync();

mockConfiguration.Verify(c => c.Reload());
}
}
}

0 comments on commit 2db3b7e

Please sign in to comment.