in internal/loader/configuration_setting_loader.go [369:418]
func (csl *ConfigurationSettingLoader) getFeatureFlagSettings(ctx context.Context) (map[string]interface{}, map[acpv1.Selector][]*azcore.ETag, error) {
featureFlagFilters := GetFeatureFlagFilters(csl.Spec)
settingsClient := csl.SettingsClient
if settingsClient == nil {
settingsClient = &SelectorSettingsClient{
selectors: featureFlagFilters,
}
}
settingsResponse, err := csl.ExecuteFailoverPolicy(ctx, settingsClient)
if err != nil {
return nil, nil, err
}
settingsLength := len(settingsResponse.Settings)
featureFlagExist := make(map[string]bool, settingsLength)
deduplicatedFeatureFlags := make([]interface{}, 0)
clientEndpoint := ""
if manager, ok := csl.ClientManager.(*ConfigurationClientManager); ok {
// use primary client endpoint in feature flag reference
clientEndpoint = manager.StaticClientWrappers[0].Endpoint
}
// if settings returned like this: [{"id": "Beta"...}, {"id": "Alpha"...}, {"id": "Beta"...}], we need to deduplicate it to [{"id": "Alpha"...}, {"id": "Beta"...}], the last one wins
for i := settingsLength - 1; i >= 0; i-- {
key := *settingsResponse.Settings[i].Key
if featureFlagExist[key] {
continue
}
featureFlagExist[key] = true
var out map[string]interface{}
err := json.Unmarshal([]byte(*settingsResponse.Settings[i].Value), &out)
if err != nil {
return nil, nil, fmt.Errorf("failed to unmarshal feature flag settings: %s", err.Error())
}
populateTelemetryMetadata(out, settingsResponse.Settings[i], clientEndpoint)
deduplicatedFeatureFlags = append(deduplicatedFeatureFlags, out)
}
// reverse the deduplicateFeatureFlags to keep the order
for i, j := 0, len(deduplicatedFeatureFlags)-1; i < j; i, j = i+1, j-1 {
deduplicatedFeatureFlags[i], deduplicatedFeatureFlags[j] = deduplicatedFeatureFlags[j], deduplicatedFeatureFlags[i]
}
// featureFlagSection = {"feature_flags": [{...}, {...}]}
var featureFlagSection = map[string]interface{}{
FeatureFlagSectionName: deduplicatedFeatureFlags,
}
return featureFlagSection, settingsResponse.Etags, nil
}