Skip to content

Commit f0f8ca2

Browse files
authored
Throw exception if feature management schemas are mixed to avoid unintentionally hiding feature flags. (#187)
1 parent b05ae89 commit f0f8ca2

File tree

3 files changed

+19
-2
lines changed

3 files changed

+19
-2
lines changed

src/Microsoft.FeatureManagement/ConfigurationDynamicFeatureDefinitionProvider.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@ namespace Microsoft.FeatureManagement
1919
/// </summary>
2020
sealed class ConfigurationDynamicFeatureDefinitionProvider : IDynamicFeatureDefinitionProvider, IDisposable
2121
{
22+
public const string DynamicFeatureDefinitionsSectionName = "DynamicFeatures";
2223
private const string FeatureManagementSectionName = "FeatureManagement";
23-
private const string DynamicFeatureDefinitionsSectionName= "DynamicFeatures";
2424
private const string FeatureVariantsSectionName = "Variants";
2525
private readonly IConfiguration _configuration;
2626
private readonly ConcurrentDictionary<string, DynamicFeatureDefinition> _dynamicFeatureDefinitions;

src/Microsoft.FeatureManagement/ConfigurationFeatureFlagDefinitionProvider.cs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,18 @@ private IEnumerable<IConfigurationSection> GetFeatureFlagDefinitionSections()
186186

187187
IConfigurationSection featureFlagsSection = featureManagementChildren.FirstOrDefault(s => s.Key == FeatureFlagDefinitionsSectionName);
188188

189+
//
190+
// Check for mixed schema to avoid confusing scenario where feature flags defined in separate sources with different schemas don't mix.
191+
if (featureFlagsSection != null &&
192+
featureManagementChildren.Any(section =>
193+
!section.Key.Equals(FeatureFlagDefinitionsSectionName) &&
194+
!section.Key.Equals(ConfigurationDynamicFeatureDefinitionProvider.DynamicFeatureDefinitionsSectionName)))
195+
{
196+
throw new FeatureManagementException(
197+
FeatureManagementError.InvalidConfiguration,
198+
"Detected feature flags defined using different feature management schemas.");
199+
}
200+
189201
//
190202
// Support backward compatability where feature flag definitions were directly under the feature management section
191203
return featureFlagsSection == null ?

src/Microsoft.FeatureManagement/FeatureManagementError.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,11 @@ public enum FeatureManagementError
6161
/// <summary>
6262
/// A dynamic feature does not have a default feature variant configured.
6363
/// </summary>
64-
MissingDefaultFeatureVariant
64+
MissingDefaultFeatureVariant,
65+
66+
/// <summary>
67+
/// A configuration error is present in the feature management system.
68+
/// </summary>
69+
InvalidConfiguration
6570
}
6671
}

0 commit comments

Comments
 (0)