Skip to content

Commit

Permalink
fix(feature-service/get_edge_override): handle deleted features (#3368)
Browse files Browse the repository at this point in the history
  • Loading branch information
gagantrivedi authored Feb 2, 2024
1 parent ccf922a commit 1eae11c
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 3 deletions.
8 changes: 5 additions & 3 deletions api/features/features_service.py
Original file line number Diff line number Diff line change
Expand Up @@ -100,8 +100,10 @@ def get_edge_overrides_data(
if feature_state.feature_segment_id:
env_feature_overrides_data.num_segment_overrides += 1
for identity_override in get_overrides_data_future.result():
all_overrides_data[
identity_override.feature_state.feature.id
].add_identity_override()
# Only override features that exists in core
if identity_override.feature_state.feature.id in all_overrides_data:
all_overrides_data[
identity_override.feature_state.feature.id
].add_identity_override()

return all_overrides_data
36 changes: 36 additions & 0 deletions api/tests/unit/features/test_unit_features_features_service.py
Original file line number Diff line number Diff line change
Expand Up @@ -261,3 +261,39 @@ def test_feature_get_edge_overrides_data(
overrides_data[distinct_segment_featurestate.feature.id].num_segment_overrides
== 1
)


@pytest.mark.django_db(transaction=True)
def test_get_edge_overrides_data_skips_deleted_features(
feature: Feature,
environment: "Environment",
identity: Identity,
identity_featurestate: FeatureState,
distinct_identity_featurestate: FeatureState,
dynamodb_identity_wrapper: "DynamoIdentityWrapper",
dynamodb_wrapper_v2: "DynamoEnvironmentV2Wrapper",
):
# Given
# replicate identity to Edge
edge_identity = EdgeIdentity(map_identity_to_engine(identity, with_overrides=False))
# Create identity override for two different features
edge_identity.add_feature_override(
map_feature_state_to_engine(identity_featurestate),
)
edge_identity.add_feature_override(
map_feature_state_to_engine(distinct_identity_featurestate),
)
edge_identity.save()

# Now, delete one of the feature
feature.delete()

# When
overrides_data = get_edge_overrides_data(environment)

# Then - we only have one identity override(for the feature that still exists)
assert len(overrides_data) == 1
assert (
overrides_data[distinct_identity_featurestate.feature.id].num_identity_overrides
== 1
)

0 comments on commit 1eae11c

Please sign in to comment.