Skip to content

Commit e86be14

Browse files
authored
update ttl (#123)
* update ttl * policy tests
1 parent 5093bab commit e86be14

File tree

10 files changed

+77
-1
lines changed

10 files changed

+77
-1
lines changed

BitFaster.Caching.UnitTests/Lru/ConcurrentTLruTests.cs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,18 @@ public async Task WhenItemIsExpiredItIsRemoved()
5454
lru.TryGet(1, out var value).Should().BeFalse();
5555
}
5656

57+
[Fact]
58+
public async Task WhenItemIsUpdatedTtlIsExtended()
59+
{
60+
lru.GetOrAdd(1, valueFactory.Create);
61+
62+
await Task.Delay(timeToLive * 2);
63+
64+
lru.TryUpdate(1, "3");
65+
66+
lru.TryGet(1, out var value).Should().BeTrue();
67+
}
68+
5769
[Fact]
5870
public void WhenValueEvictedItemRemovedEventIsFired()
5971
{

BitFaster.Caching.UnitTests/Lru/TlruDateTimePolicyTests.cs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,19 @@ public void TouchUpdatesItemWasAccessed()
4242
item.WasAccessed.Should().BeTrue();
4343
}
4444

45+
[Fact]
46+
public async Task UpdateUpdatesTickCount()
47+
{
48+
var item = this.policy.CreateItem(1, 2);
49+
var ts = item.TimeStamp;
50+
51+
await Task.Delay(TimeSpan.FromMilliseconds(1));
52+
53+
this.policy.Update(item);
54+
55+
item.TimeStamp.Should().BeAfter(ts);
56+
}
57+
4558
[Fact]
4659
public void WhenItemIsExpiredShouldDiscardIsTrue()
4760
{

BitFaster.Caching.UnitTests/Lru/TlruLongTicksPolicyTests.cs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,19 @@ public void TouchUpdatesItemWasAccessed()
4545
item.WasAccessed.Should().BeTrue();
4646
}
4747

48+
[Fact]
49+
public async Task UpdateUpdatesTickCount()
50+
{
51+
var item = this.policy.CreateItem(1, 2);
52+
var tc = item.TickCount;
53+
54+
await Task.Delay(TimeSpan.FromMilliseconds(1));
55+
56+
this.policy.Update(item);
57+
58+
item.TickCount.Should().BeGreaterThan(tc);
59+
}
60+
4861
[Fact]
4962
public void WhenItemIsExpiredShouldDiscardIsTrue()
5063
{

BitFaster.Caching.UnitTests/Lru/TlruTicksPolicyTests.cs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,19 @@ public void TouchUpdatesItemWasAccessed()
4242
item.WasAccessed.Should().BeTrue();
4343
}
4444

45+
[Fact]
46+
public async Task UpdateUpdatesTickCount()
47+
{
48+
var item = this.policy.CreateItem(1, 2);
49+
var tc = item.TickCount;
50+
51+
await Task.Delay(TimeSpan.FromMilliseconds(1));
52+
53+
this.policy.Update(item);
54+
55+
item.TickCount.Should().BeGreaterThan(tc);
56+
}
57+
4558
[Fact]
4659
public void WhenItemIsExpiredShouldDiscardIsTrue()
4760
{

BitFaster.Caching/Lru/IItemPolicy.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ public interface IItemPolicy<in K, in V, I> where I : LruItem<K, V>
1212

1313
void Touch(I item);
1414

15+
void Update(I item);
16+
1517
bool ShouldDiscard(I item);
1618

1719
bool CanDiscard();

BitFaster.Caching/Lru/LruPolicy.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,11 @@ public void Touch(LruItem<K, V> item)
2424
item.WasAccessed = true;
2525
}
2626

27+
[MethodImpl(MethodImplOptions.AggressiveInlining)]
28+
public void Update(LruItem<K, V> item)
29+
{
30+
}
31+
2732
[MethodImpl(MethodImplOptions.AggressiveInlining)]
2833
public bool ShouldDiscard(LruItem<K, V> item)
2934
{

BitFaster.Caching/Lru/TemplateConcurrentLru.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -258,7 +258,7 @@ public bool TryUpdate(K key, V value)
258258
{
259259
V oldValue = existing.Value;
260260
existing.Value = value;
261-
261+
this.itemPolicy.Update(existing);
262262
Disposer<V>.Dispose(oldValue);
263263

264264
return true;

BitFaster.Caching/Lru/TlruDateTimePolicy.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,12 @@ public void Touch(TimeStampedLruItem<K, V> item)
3232
item.WasAccessed = true;
3333
}
3434

35+
[MethodImpl(MethodImplOptions.AggressiveInlining)]
36+
public void Update(TimeStampedLruItem<K, V> item)
37+
{
38+
item.TimeStamp = DateTime.UtcNow;
39+
}
40+
3541
[MethodImpl(MethodImplOptions.AggressiveInlining)]
3642
public bool ShouldDiscard(TimeStampedLruItem<K, V> item)
3743
{

BitFaster.Caching/Lru/TlruLongTicksPolicy.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,12 @@ public void Touch(LongTickCountLruItem<K, V> item)
3838
item.WasAccessed = true;
3939
}
4040

41+
[MethodImpl(MethodImplOptions.AggressiveInlining)]
42+
public void Update(LongTickCountLruItem<K, V> item)
43+
{
44+
item.TickCount = Stopwatch.GetTimestamp();
45+
}
46+
4147
[MethodImpl(MethodImplOptions.AggressiveInlining)]
4248
public bool ShouldDiscard(LongTickCountLruItem<K, V> item)
4349
{

BitFaster.Caching/Lru/TlruTicksPolicy.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,12 @@ public void Touch(TickCountLruItem<K, V> item)
3737
item.WasAccessed = true;
3838
}
3939

40+
[MethodImpl(MethodImplOptions.AggressiveInlining)]
41+
public void Update(TickCountLruItem<K, V> item)
42+
{
43+
item.TickCount = Environment.TickCount;
44+
}
45+
4046
[MethodImpl(MethodImplOptions.AggressiveInlining)]
4147
public bool ShouldDiscard(TickCountLruItem<K, V> item)
4248
{

0 commit comments

Comments
 (0)