Skip to content

Commit b89c6d0

Browse files
committed
Merge branch 'main' of https://github.com/Azure/AppConfiguration-DotnetProvider into user/junbchen/shorten_timeout_of_each_call
2 parents 4e7f8b0 + c1cdea3 commit b89c6d0

File tree

11 files changed

+645
-558
lines changed

11 files changed

+645
-558
lines changed

src/Microsoft.Azure.AppConfiguration.AspNetCore/Microsoft.Azure.AppConfiguration.AspNetCore.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
<!-- Nuget Package Version Settings -->
2222

2323
<PropertyGroup>
24-
<OfficialVersion>8.1.0</OfficialVersion>
24+
<OfficialVersion>8.1.1</OfficialVersion>
2525
</PropertyGroup>
2626

2727
<PropertyGroup Condition="'$(CDP_PATCH_NUMBER)'!='' AND '$(CDP_BUILD_TYPE)'=='Official'">

src/Microsoft.Azure.AppConfiguration.Functions.Worker/Microsoft.Azure.AppConfiguration.Functions.Worker.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
<!-- Nuget Package Version Settings -->
2525

2626
<PropertyGroup>
27-
<OfficialVersion>8.1.0</OfficialVersion>
27+
<OfficialVersion>8.1.1</OfficialVersion>
2828
</PropertyGroup>
2929

3030
<PropertyGroup Condition="'$(CDP_PATCH_NUMBER)'!='' AND '$(CDP_BUILD_TYPE)'=='Official'">

src/Microsoft.Extensions.Configuration.AzureAppConfiguration/AzureAppConfigurationOptions.cs

Lines changed: 518 additions & 517 deletions
Large diffs are not rendered by default.

src/Microsoft.Extensions.Configuration.AzureAppConfiguration/AzureAppConfigurationProvider.cs

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,13 @@ public AzureAppConfigurationProvider(IConfigurationClientManager configClientMan
118118

119119
if (options.RegisterAllEnabled)
120120
{
121+
if (options.KvCollectionRefreshInterval <= TimeSpan.Zero)
122+
{
123+
throw new ArgumentException(
124+
$"{nameof(options.KvCollectionRefreshInterval)} must be greater than zero seconds when using RegisterAll for refresh",
125+
nameof(options));
126+
}
127+
121128
MinRefreshInterval = TimeSpan.FromTicks(Math.Min(minWatcherRefreshInterval.Ticks, options.KvCollectionRefreshInterval.Ticks));
122129
}
123130
else if (hasWatchers)
@@ -206,7 +213,7 @@ public async Task RefreshAsync(CancellationToken cancellationToken)
206213
var utcNow = DateTimeOffset.UtcNow;
207214
IEnumerable<KeyValueWatcher> refreshableIndividualKvWatchers = _options.IndividualKvWatchers.Where(kvWatcher => utcNow >= kvWatcher.NextRefreshTime);
208215
IEnumerable<KeyValueWatcher> refreshableFfWatchers = _options.FeatureFlagWatchers.Where(ffWatcher => utcNow >= ffWatcher.NextRefreshTime);
209-
bool isRefreshDue = utcNow >= _nextCollectionRefreshTime;
216+
bool isRefreshDue = _options.RegisterAllEnabled && utcNow >= _nextCollectionRefreshTime;
210217

211218
// Skip refresh if mappedData is loaded, but none of the watchers or adapters are refreshable.
212219
if (_mappedData != null &&
@@ -412,7 +419,7 @@ await ExecuteWithFailOverPolicyAsync(clients, async (client) =>
412419
}
413420
}
414421

415-
if (isRefreshDue)
422+
if (_options.RegisterAllEnabled && isRefreshDue)
416423
{
417424
_nextCollectionRefreshTime = DateTimeOffset.UtcNow.Add(_options.KvCollectionRefreshInterval);
418425
}
@@ -548,6 +555,11 @@ public void ProcessPushNotification(PushNotification pushNotification, TimeSpan?
548555

549556
if (_configClientManager.UpdateSyncToken(pushNotification.ResourceUri, pushNotification.SyncToken))
550557
{
558+
if (_requestTracingEnabled && _requestTracingOptions != null)
559+
{
560+
_requestTracingOptions.IsPushRefreshUsed = true;
561+
}
562+
551563
SetDirty(maxDelay);
552564
}
553565
else

src/Microsoft.Extensions.Configuration.AzureAppConfiguration/Constants/RequestTracingConstants.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ internal class RequestTracingConstants
3333
public const string LoadBalancingEnabledTag = "LB";
3434
public const string SignalRUsedTag = "SignalR";
3535
public const string FailoverRequestTag = "Failover";
36+
public const string PushRefreshTag = "PushRefresh";
3637

3738
public const string FeatureFlagFilterTypeKey = "Filter";
3839
public const string CustomFilter = "CSTM";

src/Microsoft.Extensions.Configuration.AzureAppConfiguration/Microsoft.Extensions.Configuration.AzureAppConfiguration.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
<!-- Nuget Package Version Settings -->
3636

3737
<PropertyGroup>
38-
<OfficialVersion>8.1.0</OfficialVersion>
38+
<OfficialVersion>8.1.1</OfficialVersion>
3939
</PropertyGroup>
4040

4141
<PropertyGroup Condition="'$(CDP_PATCH_NUMBER)'!='' AND '$(CDP_BUILD_TYPE)'=='Official'">

src/Microsoft.Extensions.Configuration.AzureAppConfiguration/RequestTracingOptions.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,11 @@ internal class RequestTracingOptions
6363
/// </summary>
6464
public bool IsFailoverRequest { get; set; } = false;
6565

66+
/// <summary>
67+
/// Flag to indicate whether push refresh is used.
68+
/// </summary>
69+
public bool IsPushRefreshUsed { get; set; } = false;
70+
6671
/// <summary>
6772
/// Checks whether any tracing feature is used.
6873
/// </summary>

src/Microsoft.Extensions.Configuration.AzureAppConfiguration/TracingUtils.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,11 @@ private static string CreateCorrelationContextHeader(RequestType requestType, Re
201201
correlationContextTags.Add(RequestTracingConstants.FailoverRequestTag);
202202
}
203203

204+
if (requestTracingOptions.IsPushRefreshUsed)
205+
{
206+
correlationContextTags.Add(RequestTracingConstants.PushRefreshTag);
207+
}
208+
204209
var sb = new StringBuilder();
205210

206211
foreach (KeyValuePair<string, string> kvp in correlationContextKeyValues)

tests/Tests.AzureAppConfiguration/FeatureManagementTests.cs

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1066,6 +1066,63 @@ public void SelectFeatureFlags()
10661066
Assert.Null(config["FeatureManagement:App2_Feature2"]);
10671067
}
10681068

1069+
[Fact]
1070+
public void SelectOrderDoesNotAffectLoad()
1071+
{
1072+
var mockResponse = new Mock<Response>();
1073+
var mockClient = new Mock<ConfigurationClient>(MockBehavior.Strict);
1074+
1075+
List<ConfigurationSetting> kvCollection = new List<ConfigurationSetting>
1076+
{
1077+
ConfigurationModelFactory.ConfigurationSetting("TestKey1", "TestValue1", "label",
1078+
eTag: new ETag("0a76e3d7-7ec1-4e37-883c-9ea6d0d89e63")),
1079+
ConfigurationModelFactory.ConfigurationSetting("TestKey2", "TestValue2", "label",
1080+
eTag: new ETag("31c38369-831f-4bf1-b9ad-79db56c8b989"))
1081+
};
1082+
1083+
MockAsyncPageable GetTestKeys(SettingSelector selector, CancellationToken ct)
1084+
{
1085+
List<ConfigurationSetting> settingCollection;
1086+
1087+
if (selector.KeyFilter.StartsWith(FeatureManagementConstants.FeatureFlagMarker))
1088+
{
1089+
settingCollection = _featureFlagCollection;
1090+
}
1091+
else
1092+
{
1093+
settingCollection = kvCollection;
1094+
}
1095+
1096+
var copy = new List<ConfigurationSetting>();
1097+
var newSetting = settingCollection.FirstOrDefault(s => (s.Key == selector.KeyFilter && s.Label == selector.LabelFilter));
1098+
if (newSetting != null)
1099+
copy.Add(TestHelpers.CloneSetting(newSetting));
1100+
return new MockAsyncPageable(copy);
1101+
}
1102+
1103+
mockClient.Setup(c => c.GetConfigurationSettingsAsync(It.IsAny<SettingSelector>(), It.IsAny<CancellationToken>()))
1104+
.Returns((Func<SettingSelector, CancellationToken, MockAsyncPageable>)GetTestKeys);
1105+
1106+
var config = new ConfigurationBuilder()
1107+
.AddAzureAppConfiguration(options =>
1108+
{
1109+
options.ClientManager = TestHelpers.CreateMockedConfigurationClientManager(mockClient.Object);
1110+
options.UseFeatureFlags(ff =>
1111+
{
1112+
ff.Select("App1_Feature1", "App1_Label");
1113+
ff.Select("App2_Feature1", "App2_Label");
1114+
});
1115+
options.Select("TestKey1", "label");
1116+
options.Select("TestKey2", "label");
1117+
})
1118+
.Build();
1119+
1120+
Assert.Equal("True", config["FeatureManagement:App1_Feature1"]);
1121+
Assert.Equal("False", config["FeatureManagement:App2_Feature1"]);
1122+
Assert.Equal("TestValue1", config["TestKey1"]);
1123+
Assert.Equal("TestValue2", config["TestKey2"]);
1124+
}
1125+
10691126
[Fact]
10701127
public void TestNullAndMissingValuesForConditions()
10711128
{

0 commit comments

Comments
 (0)