Skip to content

Commit cdc4bce

Browse files
authored
Skip LFU rescheduling when expiry hasn't changed (#580)
* skip reschedule * cleanup ---------
1 parent fa1c0fb commit cdc4bce

File tree

1 file changed

+12
-6
lines changed

1 file changed

+12
-6
lines changed

BitFaster.Caching/Lfu/NodePolicy.cs

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -97,9 +97,12 @@ public void AdvanceTime()
9797
[MethodImpl(MethodImplOptions.AggressiveInlining)]
9898
public void OnRead(TimeOrderNode<K, V> node)
9999
{
100-
var currentExpiry = node.TimeToExpire - current;
101-
node.TimeToExpire = current + expiryCalculator.GetExpireAfterRead(node.Key, node.Value, currentExpiry);
102-
wheel.Reschedule(node);
100+
var oldTte = node.TimeToExpire;
101+
node.TimeToExpire = current + expiryCalculator.GetExpireAfterRead(node.Key, node.Value, node.TimeToExpire - current);
102+
if (oldTte.raw != node.TimeToExpire.raw)
103+
{
104+
wheel.Reschedule(node);
105+
}
103106
}
104107

105108
[MethodImpl(MethodImplOptions.AggressiveInlining)]
@@ -113,9 +116,12 @@ public void OnWrite(TimeOrderNode<K, V> node)
113116
}
114117
else
115118
{
116-
var currentExpiry = node.TimeToExpire - current;
117-
node.TimeToExpire = current + expiryCalculator.GetExpireAfterUpdate(node.Key, node.Value, currentExpiry);
118-
wheel.Reschedule(node);
119+
var oldTte = node.TimeToExpire;
120+
node.TimeToExpire = current + expiryCalculator.GetExpireAfterUpdate(node.Key, node.Value, node.TimeToExpire - current);
121+
if (oldTte.raw != node.TimeToExpire.raw)
122+
{
123+
wheel.Reschedule(node);
124+
}
119125
}
120126
}
121127

0 commit comments

Comments
 (0)