|
86 | 86 | import static datadog.trace.api.ConfigDefaults.DEFAULT_ELASTICSEARCH_BODY_ENABLED; |
87 | 87 | import static datadog.trace.api.ConfigDefaults.DEFAULT_ELASTICSEARCH_PARAMS_ENABLED; |
88 | 88 | import static datadog.trace.api.ConfigDefaults.DEFAULT_EXPERIMENTATAL_JEE_SPLIT_BY_DEPLOYMENT; |
89 | | -import static datadog.trace.api.ConfigDefaults.DEFAULT_FEATURE_FLAGGING_CONFIGURATION_SOURCE; |
90 | 89 | import static datadog.trace.api.ConfigDefaults.DEFAULT_FEATURE_FLAGGING_CONFIGURATION_SOURCE_POLL_INTERVAL_SECONDS; |
91 | 90 | import static datadog.trace.api.ConfigDefaults.DEFAULT_FEATURE_FLAGGING_CONFIGURATION_SOURCE_REQUEST_TIMEOUT_SECONDS; |
92 | 91 | import static datadog.trace.api.ConfigDefaults.DEFAULT_GRPC_CLIENT_ERROR_STATUSES; |
|
726 | 725 | import static datadog.trace.api.config.TracerConfig.WRITER_BAGGAGE_INJECT; |
727 | 726 | import static datadog.trace.api.config.TracerConfig.WRITER_LINKS_INJECT; |
728 | 727 | import static datadog.trace.api.config.TracerConfig.WRITER_TYPE; |
| 728 | +import static datadog.trace.api.featureflag.config.FeatureFlaggingConfig.CONFIGURATION_SOURCE_OFFLINE; |
| 729 | +import static datadog.trace.api.featureflag.config.FeatureFlaggingConfig.EXPERIMENTAL_FLAGGING_PROVIDER_ENABLED; |
729 | 730 | import static datadog.trace.api.featureflag.config.FeatureFlaggingConfig.FEATURE_FLAGS_CONFIGURATION_SOURCE; |
730 | 731 | import static datadog.trace.api.featureflag.config.FeatureFlaggingConfig.FEATURE_FLAGS_CONFIGURATION_SOURCE_AGENTLESS_BASE_URL; |
731 | 732 | import static datadog.trace.api.featureflag.config.FeatureFlaggingConfig.FEATURE_FLAGS_CONFIGURATION_SOURCE_AGENTLESS_POLL_INTERVAL_SECONDS; |
732 | 733 | import static datadog.trace.api.featureflag.config.FeatureFlaggingConfig.FEATURE_FLAGS_CONFIGURATION_SOURCE_AGENTLESS_REQUEST_TIMEOUT_SECONDS; |
| 734 | +import static datadog.trace.api.featureflag.config.FeatureFlaggingConfig.FEATURE_FLAGS_ENABLED; |
| 735 | +import static datadog.trace.api.featureflag.config.FeatureFlaggingConfig.isSupportedConfigurationSource; |
| 736 | +import static datadog.trace.api.featureflag.config.FeatureFlaggingConfig.resolveConfigurationSource; |
733 | 737 | import static datadog.trace.api.telemetry.LogCollector.SEND_TELEMETRY; |
734 | 738 | import static datadog.trace.bootstrap.instrumentation.api.WriterConstants.OTLP_WRITER_TYPE; |
735 | 739 | import static datadog.trace.util.CollectionUtils.tryMakeImmutableList; |
@@ -1221,6 +1225,7 @@ public static String getHostName() { |
1221 | 1225 |
|
1222 | 1226 | private final int remoteConfigMaxExtraServices; |
1223 | 1227 |
|
| 1228 | + private final boolean featureFlaggingProviderEnabled; |
1224 | 1229 | private final String featureFlaggingConfigurationSource; |
1225 | 1230 | private final String featureFlaggingConfigurationSourceAgentlessBaseUrl; |
1226 | 1231 | private final int featureFlaggingConfigurationSourcePollIntervalSeconds; |
@@ -2851,10 +2856,34 @@ PROFILING_DATADOG_PROFILER_ENABLED, isDatadogProfilerSafeInCurrentEnvironment()) |
2851 | 2856 | configProvider.getInteger( |
2852 | 2857 | REMOTE_CONFIG_MAX_EXTRA_SERVICES, DEFAULT_REMOTE_CONFIG_MAX_EXTRA_SERVICES); |
2853 | 2858 |
|
2854 | | - featureFlaggingConfigurationSource = |
2855 | | - normalizeFeatureFlaggingConfigurationSource( |
2856 | | - configProvider.getString( |
2857 | | - FEATURE_FLAGS_CONFIGURATION_SOURCE, DEFAULT_FEATURE_FLAGGING_CONFIGURATION_SOURCE)); |
| 2859 | + final boolean configuredFeatureFlaggingProviderEnabled = |
| 2860 | + configProvider.getBoolean(FEATURE_FLAGS_ENABLED, true); |
| 2861 | + final Boolean legacyFeatureFlaggingProviderEnabled = |
| 2862 | + configProvider.getBoolean(EXPERIMENTAL_FLAGGING_PROVIDER_ENABLED); |
| 2863 | + final String configuredFeatureFlaggingConfigurationSource = |
| 2864 | + configProvider.isSet(FEATURE_FLAGS_CONFIGURATION_SOURCE) |
| 2865 | + ? configProvider.getString(FEATURE_FLAGS_CONFIGURATION_SOURCE) |
| 2866 | + : null; |
| 2867 | + final String resolvedFeatureFlaggingConfigurationSource = |
| 2868 | + resolveConfigurationSource( |
| 2869 | + configuredFeatureFlaggingProviderEnabled, |
| 2870 | + configuredFeatureFlaggingConfigurationSource, |
| 2871 | + legacyFeatureFlaggingProviderEnabled); |
| 2872 | + if (legacyFeatureFlaggingProviderEnabled != null) { |
| 2873 | + log.warn( |
| 2874 | + "Setting {} is deprecated. Use {} and {} instead.", |
| 2875 | + EXPERIMENTAL_FLAGGING_PROVIDER_ENABLED, |
| 2876 | + FEATURE_FLAGS_ENABLED, |
| 2877 | + FEATURE_FLAGS_CONFIGURATION_SOURCE); |
| 2878 | + } |
| 2879 | + if (!isSupportedConfigurationSource(configuredFeatureFlaggingConfigurationSource)) { |
| 2880 | + log.warn( |
| 2881 | + "Unsupported Feature Flagging configuration source: {}. Disabling Feature Flagging", |
| 2882 | + configuredFeatureFlaggingConfigurationSource); |
| 2883 | + } |
| 2884 | + featureFlaggingProviderEnabled = |
| 2885 | + !CONFIGURATION_SOURCE_OFFLINE.equals(resolvedFeatureFlaggingConfigurationSource); |
| 2886 | + featureFlaggingConfigurationSource = resolvedFeatureFlaggingConfigurationSource; |
2858 | 2887 | featureFlaggingConfigurationSourceAgentlessBaseUrl = |
2859 | 2888 | configProvider.getStringNotEmpty( |
2860 | 2889 | FEATURE_FLAGS_CONFIGURATION_SOURCE_AGENTLESS_BASE_URL, null); |
@@ -3797,28 +3826,6 @@ public boolean isInferredProxyPropagationEnabled() { |
3797 | 3826 | return traceInferredProxyEnabled; |
3798 | 3827 | } |
3799 | 3828 |
|
3800 | | - private static String normalizeFeatureFlaggingConfigurationSource(final String source) { |
3801 | | - if (source == null) { |
3802 | | - return DEFAULT_FEATURE_FLAGGING_CONFIGURATION_SOURCE; |
3803 | | - } |
3804 | | - final String normalized = source.trim().toLowerCase(Locale.ROOT); |
3805 | | - if (normalized.isEmpty()) { |
3806 | | - return DEFAULT_FEATURE_FLAGGING_CONFIGURATION_SOURCE; |
3807 | | - } |
3808 | | - switch (normalized) { |
3809 | | - case "agentless": |
3810 | | - case "remote_config": |
3811 | | - case "offline": |
3812 | | - return normalized; |
3813 | | - default: |
3814 | | - log.warn( |
3815 | | - "Unsupported Feature Flagging configuration source: {}. Defaulting to {}", |
3816 | | - source, |
3817 | | - DEFAULT_FEATURE_FLAGGING_CONFIGURATION_SOURCE); |
3818 | | - return DEFAULT_FEATURE_FLAGGING_CONFIGURATION_SOURCE; |
3819 | | - } |
3820 | | - } |
3821 | | - |
3822 | 3829 | public boolean isBaggageExtract() { |
3823 | 3830 | return tracePropagationStylesToExtract.contains(TracePropagationStyle.BAGGAGE); |
3824 | 3831 | } |
@@ -4736,6 +4743,10 @@ public int getRemoteConfigMaxExtraServices() { |
4736 | 4743 | return remoteConfigMaxExtraServices; |
4737 | 4744 | } |
4738 | 4745 |
|
| 4746 | + public boolean isFeatureFlaggingProviderEnabled() { |
| 4747 | + return featureFlaggingProviderEnabled; |
| 4748 | + } |
| 4749 | + |
4739 | 4750 | public String getFeatureFlaggingConfigurationSource() { |
4740 | 4751 | return featureFlaggingConfigurationSource; |
4741 | 4752 | } |
@@ -6584,6 +6595,8 @@ public String toString() { |
6584 | 6595 | + remoteConfigMaxPayloadSize |
6585 | 6596 | + ", remoteConfigIntegrityCheckEnabled=" |
6586 | 6597 | + remoteConfigIntegrityCheckEnabled |
| 6598 | + + ", featureFlaggingProviderEnabled=" |
| 6599 | + + featureFlaggingProviderEnabled |
6587 | 6600 | + ", featureFlaggingConfigurationSource=" |
6588 | 6601 | + featureFlaggingConfigurationSource |
6589 | 6602 | + ", featureFlaggingConfigurationSourceAgentlessBaseUrl=" |
|
0 commit comments