22from concurrent .futures import ThreadPoolExecutor
33
44from edge_api .identities .edge_identity_service import (
5- get_edge_identity_overrides_for_feature_ids ,
5+ get_edge_identity_override_keys ,
6+ )
7+ from environments .dynamodb .utils import (
8+ get_feature_id_from_identity_override_document_key ,
69)
710from features .dataclasses import EnvironmentFeatureOverridesData
811from features .versioning .versioning_service import get_environment_flags_list
1619
1720def get_overrides_data (
1821 environment : "Environment" ,
19- feature_ids : None | list [int ] = None ,
2022) -> OverridesData :
2123 """
2224 Get correct overrides counts for a given environment.
2325
24- :param project: project to get overrides data for
26+ :param environment: environment to get overrides data for
2527 :return: overrides data getter dictionary of {feature_id: EnvironmentFeatureOverridesData}
2628 """
2729 project = environment .project
@@ -30,7 +32,7 @@ def get_overrides_data(
3032 if project .edge_v2_identity_overrides_migrated :
3133 # If v2 migration is complete, count segment overrides from Core
3234 # and identity overrides from DynamoDB.
33- return get_edge_overrides_data (environment , feature_ids )
35+ return get_edge_overrides_data (environment )
3436 # If v2 migration is not started, in progress, or incomplete,
3537 # only count segment overrides from Core.
3638 # v1 Edge identity overrides are uncountable.
@@ -71,9 +73,7 @@ def get_core_overrides_data(
7173 return all_overrides_data
7274
7375
74- def get_edge_overrides_data (
75- environment : "Environment" , feature_ids : None | list [int ] = None
76- ) -> OverridesData :
76+ def get_edge_overrides_data (environment : "Environment" ) -> OverridesData :
7777 """
7878 Get the number of identity / segment overrides in a given environment for each feature in the
7979 project.
@@ -83,37 +83,32 @@ def get_edge_overrides_data(
8383 :return OverridesData: dictionary of {feature_id: EnvironmentFeatureOverridesData}
8484 """
8585
86- assert feature_ids is not None
87-
8886 with ThreadPoolExecutor () as executor :
89- get_environment_flags_list_future = executor .submit (
90- get_environment_flags_list ,
91- environment ,
92- )
87+ # Note: We intentionally let the get_environment_flags_list
88+ # call happen on the main thread to simplify testing.
89+ # The call to dynamo happens on a separate thread, which
90+ # still gives us the parallelism we need without needing
91+ # an extra thread. This does mean that the order of execution
92+ # is important here.
9393 get_overrides_data_future = executor .submit (
94- get_edge_identity_overrides_for_feature_ids ,
94+ get_edge_identity_override_keys ,
9595 environment_id = environment .id ,
96- feature_ids = feature_ids ,
9796 )
97+ flags_list = get_environment_flags_list (environment )
9898 all_overrides_data : OverridesData = {}
9999
100- for feature_state in get_environment_flags_list_future . result () :
100+ for feature_state in flags_list :
101101 env_feature_overrides_data = all_overrides_data .setdefault (
102102 feature_state .feature_id , EnvironmentFeatureOverridesData ()
103103 )
104104 if feature_state .feature_segment_id :
105105 env_feature_overrides_data .num_segment_overrides += 1
106- for identity_overrides_v2_list in get_overrides_data_future .result ():
107- for identity_override in identity_overrides_v2_list .identity_overrides :
108- # Only override features that exists in core
109- if identity_override .feature_state .feature .id in all_overrides_data :
110- all_overrides_data [ # type: ignore[no-untyped-call]
111- identity_override .feature_state .feature .id
112- ].add_identity_override ()
113- all_overrides_data [
114- identity_override .feature_state .feature .id
115- ].is_num_identity_overrides_complete = (
116- identity_overrides_v2_list .is_num_identity_overrides_complete
117- )
106+ for identity_override_key in get_overrides_data_future .result ():
107+ feature_id = get_feature_id_from_identity_override_document_key (
108+ identity_override_key
109+ )
110+ # Only override features that exists in core
111+ if feature_id in all_overrides_data :
112+ all_overrides_data [feature_id ].add_identity_override () # type: ignore[no-untyped-call]
118113
119114 return all_overrides_data
0 commit comments