Fix race condition for concurrent Updates in InMemoryConfigProvider (#1725)

This commit is contained in:
Miha Zupan 2022-05-18 12:53:01 +02:00 коммит произвёл GitHub
Родитель b09b9dcf11
Коммит 407e3a7268
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
6 изменённых файлов: 12 добавлений и 12 удалений

Просмотреть файл

@ -107,8 +107,8 @@ namespace Yarp.ReverseProxy.Configuration
public void Update(IReadOnlyList<RouteConfig> routes, IReadOnlyList<ClusterConfig> clusters)
{
var oldConfig = _config;
_config = new InMemoryConfig(routes, clusters);
var newConfig = new InMemoryConfig(routes, clusters);
var oldConfig = Interlocked.Exchange(ref _config, newConfig);
oldConfig.SignalChange();
}

Просмотреть файл

@ -46,8 +46,8 @@ namespace Yarp.Sample
/// </summary>
public void Update(IReadOnlyList<RouteConfig> routes, IReadOnlyList<ClusterConfig> clusters)
{
var oldConfig = _config;
_config = new InMemoryConfig(routes, clusters);
var newConfig = new InMemoryConfig(routes, clusters);
var oldConfig = Interlocked.Exchange(ref _config, newConfig);
oldConfig.SignalChange();
}

Просмотреть файл

@ -22,8 +22,8 @@ internal class KubernetesConfigProvider : IProxyConfigProvider, IUpdateConfig
public Task UpdateAsync(IReadOnlyList<RouteConfig> routes, IReadOnlyList<ClusterConfig> clusters, CancellationToken cancellationToken)
{
var oldConfig = _config;
_config = new MessageConfig(routes, clusters);
var newConfig = new MessageConfig(routes, clusters);
var oldConfig = Interlocked.Exchange(ref _config, newConfig);
oldConfig.SignalChange();
return Task.CompletedTask;

Просмотреть файл

@ -33,8 +33,8 @@ namespace Yarp.ReverseProxy.Configuration
public void Update(IReadOnlyList<RouteConfig> routes, IReadOnlyList<ClusterConfig> clusters)
{
var oldConfig = _config;
_config = new InMemoryConfig(routes, clusters);
var newConfig = new InMemoryConfig(routes, clusters);
var oldConfig = Interlocked.Exchange(ref _config, newConfig);
oldConfig.SignalChange();
}

Просмотреть файл

@ -34,8 +34,8 @@ namespace Yarp.ReverseProxy.Configuration.ConfigProvider
public void Update(IReadOnlyList<RouteConfig> routes, IReadOnlyList<ClusterConfig> clusters)
{
var oldConfig = _config;
_config = new InMemoryConfig(routes, clusters);
var newConfig = new InMemoryConfig(routes, clusters);
var oldConfig = Interlocked.Exchange(ref _config, newConfig);
oldConfig.SignalChange();
}

Просмотреть файл

@ -33,8 +33,8 @@ namespace Yarp.ReverseProxy.Configuration
public void Update(IReadOnlyList<RouteConfig> routes, IReadOnlyList<ClusterConfig> clusters)
{
var oldConfig = _config;
_config = new InMemoryConfig(routes, clusters);
var newConfig = new InMemoryConfig(routes, clusters);
var oldConfig = Interlocked.Exchange(ref _config, newConfig);
oldConfig.SignalChange();
}