Skip to content

Commit 486e240

Browse files
fix: /api/v1/environment-document N+1 query issue related to the number of segment overrides in a version (#6865)
1 parent 3587ef0 commit 486e240

2 files changed

Lines changed: 18 additions & 3 deletions

File tree

api/environments/managers.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,10 @@ def filter_for_document_builder( # type: ignore[no-untyped-def]
3838
Prefetch(
3939
"project__segments__feature_segments__feature_states",
4040
queryset=FeatureState.objects.select_related(
41-
"feature", "feature_state_value", "environment"
41+
"feature",
42+
"feature_state_value",
43+
"environment",
44+
"environment_feature_version",
4245
),
4346
),
4447
Prefetch(

api/tests/unit/environments/test_unit_environments_views_sdk_environment.py

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
FeatureStateValue,
2323
)
2424
from features.multivariate.models import MultivariateFeatureOption
25+
from features.versioning.models import EnvironmentFeatureVersion
2526
from features.versioning.tasks import enable_v2_versioning
2627
from projects.models import Project
2728
from segments.models import Segment
@@ -50,8 +51,6 @@ def test_get_environment_document(
5051
name="Test Environment",
5152
project=project,
5253
)
53-
if use_v2_feature_versioning:
54-
enable_v2_versioning(environment.id)
5554

5655
api_key = EnvironmentAPIKey.objects.create(environment=environment)
5756
client = APIClient()
@@ -106,6 +105,17 @@ def test_get_environment_document(
106105
string_value="option-2",
107106
)
108107

108+
if use_v2_feature_versioning:
109+
enable_v2_versioning(environment.id)
110+
111+
# create new versions of a given featurestate
112+
for _ in range(2):
113+
efv = EnvironmentFeatureVersion.objects.create(
114+
environment=environment,
115+
feature=feature,
116+
)
117+
efv.publish()
118+
109119
# and the relevant URL to get an environment document
110120
url = reverse("api-v1:environment-document")
111121

@@ -118,6 +128,8 @@ def test_get_environment_document(
118128
assert len(response.data["project"]["segments"]) == 10
119129
assert len(response.data["feature_states"]) == 11
120130
assert len(response.data["identity_overrides"]) == 10
131+
132+
environment.refresh_from_db()
121133
assert response.headers[FLAGSMITH_UPDATED_AT_HEADER] == str(
122134
environment.updated_at.timestamp()
123135
)

0 commit comments

Comments
 (0)