Skip to content

Commit b59359c

Browse files
Ensure that identity caches are separate (#129)
1 parent c13a2eb commit b59359c

File tree

4 files changed

+27
-5
lines changed

4 files changed

+27
-5
lines changed

src/main/java/com/flagsmith/FlagsmithApiWrapper.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -174,9 +174,11 @@ public Flags identifyUserWithTraits(
174174
) {
175175
assertValidUser(identifier);
176176
Flags flags = null;
177+
String cacheKey = null;
177178

178-
if (getCache() != null && getCache().getEnvFlagsCacheKey() != null) {
179-
flags = getCache().getIfPresent(getCache().getEnvFlagsCacheKey());
179+
if (getCache() != null) {
180+
cacheKey = getCache().getIdentityFlagsCacheKey(identifier);
181+
flags = getCache().getIfPresent(cacheKey);
180182

181183
if (flags != null) {
182184
return flags;
@@ -218,9 +220,9 @@ public Flags identifyUserWithTraits(
218220
getConfig().getFlagsmithFlagDefaults()
219221
);
220222

221-
if (getCache() != null) {
222-
getCache().getCache().put("identifier" + identifier, flags);
223-
logger.info("Got feature flags for flags = {} and cached.", flags);
223+
if (cacheKey != null) {
224+
getCache().getCache().put(cacheKey, flags);
225+
logger.info("Cached flags for identity {}.", identifier);
224226
}
225227

226228
} catch (TimeoutException ie) {

src/main/java/com/flagsmith/config/FlagsmithCacheConfig.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,11 @@ public String getEnvFlagsCacheKey() {
206206
return this.envFlagsCacheKey;
207207
}
208208

209+
@Override
210+
public String getIdentityFlagsCacheKey(String identifier) {
211+
return "identity" + identifier;
212+
}
213+
209214
@Override
210215
public Cache<String, Flags> getCache() {
211216
return cache;

src/main/java/com/flagsmith/interfaces/FlagsmithCache.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,13 @@ public interface FlagsmithCache {
6969
*/
7070
String getEnvFlagsCacheKey();
7171

72+
/**
73+
* Returns the cache key for a given identity.
74+
*
75+
* @return string
76+
*/
77+
String getIdentityFlagsCacheKey(String identifier);
78+
7279
/**
7380
* Returns the Cache instance.
7481
*

src/test/java/com/flagsmith/FlagsmithApiWrapperCachingTest.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,8 +156,11 @@ public void identifyUserWithTraits_nullUserIdentifier() {
156156
public void identifyUserWithTraits_fetchFlagsFromFlagsmithAndStoreThemInCache_whenCacheEmpty() {
157157
// Arrange
158158
String identifier = "test-user";
159+
String expectedCacheKey = "identity" + identifier;
159160
final ArrayList<TraitModel> traits = new ArrayList<>();
160161

162+
when(flagsmithCacheImpl.getIdentityFlagsCacheKey(identifier)).thenReturn(expectedCacheKey);
163+
161164
final FlagsAndTraitsResponse flagsAndTraitsResponse = new FlagsAndTraitsResponse();
162165
when(requestProcessor.executeAsync(any(), any(), any()))
163166
.thenReturn(FlagsmithTestHelper.futurableReturn(flagsAndTraitsResponse));
@@ -170,6 +173,11 @@ public void identifyUserWithTraits_fetchFlagsFromFlagsmithAndStoreThemInCache_wh
170173
// Assert
171174
verify(requestProcessor, times(1)).executeAsync(any(), any(), any());
172175
assertEquals(newFlagsList(new ArrayList<>()), actualUserFlagsAndTraits);
176+
177+
verify(flagsmithCacheImpl, times(1)).getIfPresent(expectedCacheKey);
178+
179+
assertEquals(1, cache.estimatedSize());
180+
assertEquals(cache.getIfPresent(expectedCacheKey), actualUserFlagsAndTraits);
173181
}
174182

175183
@Test

0 commit comments

Comments
 (0)