Skip to content

Commit 2c9fad8

Browse files
[FSSDK-11177] icache instead of lru
1 parent a217982 commit 2c9fad8

File tree

4 files changed

+21
-23
lines changed

4 files changed

+21
-23
lines changed

OptimizelySDK.Tests/CmabTests/DefaultCmabServiceTest.cs

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -381,7 +381,7 @@ public void UsesExpectedCacheKeyFormat()
381381
public void ConstructorWithoutConfigUsesDefaultCacheSettings()
382382
{
383383
var service = new DefaultCmabService();
384-
var cache = GetInternalCache(service);
384+
var cache = GetInternalCache(service) as LruCache<CmabCacheEntry>;
385385

386386
Assert.IsNotNull(cache);
387387
Assert.AreEqual(CmabConstants.DEFAULT_CACHE_SIZE, cache.MaxSizeForTesting);
@@ -393,7 +393,7 @@ public void ConstructorAppliesCustomCacheSize()
393393
{
394394
var config = new CmabConfig(42);
395395
var service = new DefaultCmabService(config, logger: _logger);
396-
var cache = GetInternalCache(service);
396+
var cache = GetInternalCache(service) as LruCache<CmabCacheEntry>;
397397

398398
Assert.IsNotNull(cache);
399399
Assert.AreEqual(42, cache.MaxSizeForTesting);
@@ -406,7 +406,7 @@ public void ConstructorAppliesCustomCacheTtl()
406406
var expectedTtl = TimeSpan.FromMinutes(3);
407407
var config = new CmabConfig(cacheTtl: expectedTtl);
408408
var service = new DefaultCmabService(config, logger: _logger);
409-
var cache = GetInternalCache(service);
409+
var cache = GetInternalCache(service) as LruCache<CmabCacheEntry>;
410410

411411
Assert.IsNotNull(cache);
412412
Assert.AreEqual(CmabConstants.DEFAULT_CACHE_SIZE, cache.MaxSizeForTesting);
@@ -419,7 +419,7 @@ public void ConstructorAppliesCustomCacheSizeAndTtl()
419419
var expectedTtl = TimeSpan.FromSeconds(90);
420420
var config = new CmabConfig(5, expectedTtl);
421421
var service = new DefaultCmabService(config, logger: _logger);
422-
var cache = GetInternalCache(service);
422+
var cache = GetInternalCache(service) as LruCache<CmabCacheEntry>;
423423

424424
Assert.IsNotNull(cache);
425425
Assert.AreEqual(5, cache.MaxSizeForTesting);
@@ -438,15 +438,15 @@ public void ConstructorUsesProvidedCustomCacheInstance()
438438
}
439439

440440
[Test]
441-
public void ConstructorThrowsWhenCustomCacheIsNotLruCache()
441+
public void ConstructorAcceptsAnyICacheImplementation()
442442
{
443-
var config = new CmabConfig(new FakeCache());
443+
var fakeCache = new FakeCache();
444+
var service = new DefaultCmabService(new CmabConfig(fakeCache), logger: _logger);
445+
var cache = GetInternalCache(service);
444446

445-
var exception =
446-
Assert.Throws<ArgumentException>(() =>
447-
new DefaultCmabService(config, logger: _logger));
448-
Assert.AreEqual("CustomCache must be of type LruCache<CmabCacheEntry>.",
449-
exception.Message);
447+
Assert.IsNotNull(cache);
448+
Assert.AreSame(fakeCache, cache);
449+
Assert.IsInstanceOf<ICache<CmabCacheEntry>>(cache);
450450
}
451451

452452
[Test]
@@ -468,9 +468,9 @@ public void ConstructorUsesProvidedClientInstance()
468468
Assert.AreSame(mockClient, client);
469469
}
470470

471-
private static LruCache<CmabCacheEntry> GetInternalCache(DefaultCmabService service)
471+
private static ICache<CmabCacheEntry> GetInternalCache(DefaultCmabService service)
472472
{
473-
return Reflection.GetFieldValue<LruCache<CmabCacheEntry>, DefaultCmabService>(service,
473+
return Reflection.GetFieldValue<ICache<CmabCacheEntry>, DefaultCmabService>(service,
474474
"_cmabCache");
475475
}
476476

@@ -490,6 +490,8 @@ public CmabCacheEntry Lookup(string key)
490490
}
491491

492492
public void Reset() { }
493+
494+
public void Remove(string key) { }
493495
}
494496

495497
private OptimizelyUserContext CreateUserContext(string userId,

OptimizelySDK.Tests/OptimizelyFactoryTest.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -308,7 +308,7 @@ public void NewDefaultInstanceUsesConfiguredCmabCache()
308308
var cmabService = Reflection.GetFieldValue<ICmabService, DecisionService>(decisionService, "CmabService");
309309
Assert.IsInstanceOf<DefaultCmabService>(cmabService);
310310

311-
var cache = Reflection.GetFieldValue<LruCache<CmabCacheEntry>, DefaultCmabService>((DefaultCmabService)cmabService, "_cmabCache");
311+
var cache = Reflection.GetFieldValue<ICache<CmabCacheEntry>, DefaultCmabService>((DefaultCmabService)cmabService, "_cmabCache") as LruCache<CmabCacheEntry>;
312312
Assert.IsNotNull(cache);
313313
Assert.AreEqual(cacheSize, cache.MaxSizeForTesting);
314314
Assert.AreEqual(cacheTtl, cache.TimeoutForTesting);

OptimizelySDK/Cmab/DefaultCmabService.cs

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -83,17 +83,17 @@ public class CmabCacheEntry
8383
/// </summary>
8484
public class DefaultCmabService : ICmabService
8585
{
86-
private readonly LruCache<CmabCacheEntry> _cmabCache;
86+
private readonly ICache<CmabCacheEntry> _cmabCache;
8787
private readonly ICmabClient _cmabClient;
8888
private readonly ILogger _logger;
8989

9090
/// <summary>
9191
/// Initializes a new instance of the DefaultCmabService class.
9292
/// </summary>
93-
/// <param name="cmabCache">LRU cache for storing CMAB decisions.</param>
93+
/// <param name="cmabCache">Cache for storing CMAB decisions.</param>
9494
/// <param name="cmabClient">Client for fetching decisions from the CMAB prediction service.</param>
9595
/// <param name="logger">Optional logger for recording service operations.</param>
96-
public DefaultCmabService(LruCache<CmabCacheEntry> cmabCache,
96+
public DefaultCmabService(ICache<CmabCacheEntry> cmabCache,
9797
ICmabClient cmabClient,
9898
ILogger logger = null)
9999
{
@@ -119,12 +119,7 @@ public DefaultCmabService(CmabConfig cmabConfig = null,
119119

120120
if (config.CustomCache != null)
121121
{
122-
_cmabCache = config.CustomCache as LruCache<CmabCacheEntry>;
123-
if (_cmabCache == null)
124-
{
125-
throw new ArgumentException(
126-
"CustomCache must be of type LruCache<CmabCacheEntry>.");
127-
}
122+
_cmabCache = config.CustomCache;
128123
}
129124
else
130125
{

OptimizelySDK/Odp/ICache.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,5 +22,6 @@ public interface ICache<T>
2222
void Save(string key, T value);
2323
T Lookup(string key);
2424
void Reset();
25+
void Remove(string key);
2526
}
2627
}

0 commit comments

Comments
 (0)