Skip to content

Commit b5f81bc

Browse files
fix: compress_dynamo_documents breaks permanent environment cache (#7014)
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
1 parent c5af2d5 commit b5f81bc

2 files changed

Lines changed: 33 additions & 6 deletions

File tree

api/environments/models.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,6 @@
5656
from projects.models import Project
5757
from segments.models import Segment
5858
from util.mappers import (
59-
map_environment_to_environment_document,
6059
map_environment_to_sdk_document,
6160
)
6261
from webhooks.models import AbstractBaseExportableWebhookModel
@@ -360,7 +359,8 @@ def write_environment_documents(
360359
):
361360
environment_document_cache.set_many(
362361
{
363-
e.api_key: map_environment_to_environment_document(e)
362+
# Use the SDK mapper so the cache perfectly matches the DB fallback
363+
e.api_key: map_environment_to_sdk_document(e)
364364
for e in environments
365365
}
366366
)

api/tests/unit/environments/test_unit_environments_models.py

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
from audit.related_object_type import RelatedObjectType
2020
from core.constants import STRING
2121
from core.request_origin import RequestOrigin
22+
from environments.enums import EnvironmentDocumentCacheMode
2223
from environments.identities.models import Identity
2324
from environments.metrics import CACHE_HIT, CACHE_MISS
2425
from environments.models import (
@@ -41,7 +42,10 @@
4142
from segments.models import Segment
4243
from tests.types import EnableFeaturesFixture
4344
from users.models import FFAdminUser
44-
from util.mappers import map_environment_to_environment_document
45+
from util.mappers import (
46+
map_environment_to_environment_document,
47+
map_environment_to_sdk_document,
48+
)
4549

4650
if typing.TYPE_CHECKING:
4751
from django.db.models import Model
@@ -1082,9 +1086,14 @@ def test_environment_save__api_key_changed__updates_environment_document_cache(
10821086

10831087
# Then
10841088
persistent_environment_document_cache.delete.assert_called_once_with(old_api_key)
1085-
persistent_environment_document_cache.set_many.assert_called_once_with(
1086-
{new_api_key: map_environment_to_environment_document(environment)}
1087-
)
1089+
persistent_environment_document_cache.set_many.assert_called_once()
1090+
1091+
# Get what was actually cached and compare to sdk document
1092+
cache_payload = persistent_environment_document_cache.set_many.call_args[0][0]
1093+
cached_document = cache_payload[new_api_key]
1094+
expected_document = map_environment_to_sdk_document(environment)
1095+
1096+
assert cached_document == expected_document
10881097

10891098

10901099
def test_get_environment_document__cache_hit__triggers_cache_hit_metric(
@@ -1307,3 +1316,21 @@ def test_environment_clone__from_v1_with_v2_flag_enabled__upgrades_to_v2_version
13071316
latest_feature_states = get_environment_flags_queryset(new_environment)
13081317
assert latest_feature_states.count() == 2
13091318
assert {fs.environment_feature_version for fs in latest_feature_states} == {efv}
1319+
1320+
1321+
@mock.patch("environments.models.environment_document_cache")
1322+
def test_write_environment_documents__persistent_caching_enabled__caches_sdk_document(
1323+
mock_document_cache: MagicMock, environment: Environment, settings: typing.Any
1324+
) -> None:
1325+
# Given
1326+
settings.CACHE_ENVIRONMENT_DOCUMENT_MODE = EnvironmentDocumentCacheMode.PERSISTENT
1327+
1328+
# When
1329+
Environment.write_environment_documents(environment_id=environment.id)
1330+
1331+
# Then
1332+
cache_payload = mock_document_cache.set_many.call_args[0][0]
1333+
cached_document = cache_payload[environment.api_key]
1334+
expected_document = map_environment_to_sdk_document(environment)
1335+
1336+
assert cached_document == expected_document

0 commit comments

Comments
 (0)