fix(arc): actually invalidate
This commit is contained in:
parent
9b5adbd00f
commit
ef4734ebb6
@ -146,23 +146,35 @@ arcAlterF !(force -> unhashedK@(hashed -> k)) f oldARC@ARC{..} now
|
|||||||
| later <= initialARCTick = uncurry (arcAlterF unhashedK f) $ initARC arcMaximumGhost arcMaximumWeight
|
| later <= initialARCTick = uncurry (arcAlterF unhashedK f) $ initARC arcMaximumGhost arcMaximumWeight
|
||||||
| otherwise = (, later) <$> if
|
| otherwise = (, later) <$> if
|
||||||
| Just (_p, x@(_, w), arcFrequent') <- HashPSQ.deleteView k arcFrequent
|
| Just (_p, x@(_, w), arcFrequent') <- HashPSQ.deleteView k arcFrequent
|
||||||
-> f (Just x) <&> \(fromMaybe x -> !(force -> x'@(_, w')))
|
-> f (Just x) <&> \case
|
||||||
-> let (arcFrequent'', arcFrequentWeight'', arcGhostFrequent') = evictToSize (arcMaximumWeight |- arcTargetRecent |- w') arcFrequent' (arcFrequentWeight - w) arcGhostFrequent
|
Nothing -> oldARC
|
||||||
in oldARC
|
{ arcFrequent = arcFrequent'
|
||||||
{ arcFrequent = HashPSQ.insert k now x' arcFrequent''
|
, arcGhostFrequent = HashPSQ.insert k now () arcGhostFrequent
|
||||||
, arcFrequentWeight = arcFrequentWeight'' + w'
|
, arcFrequentWeight = arcFrequentWeight - w
|
||||||
, arcGhostFrequent = arcGhostFrequent'
|
}
|
||||||
}
|
Just !(force -> x'@(_, w'))
|
||||||
|
-> let (arcFrequent'', arcFrequentWeight'', arcGhostFrequent') = evictToSize (arcMaximumWeight |- arcTargetRecent |- w') arcFrequent' (arcFrequentWeight - w) arcGhostFrequent
|
||||||
|
in oldARC
|
||||||
|
{ arcFrequent = HashPSQ.insert k now x' arcFrequent''
|
||||||
|
, arcFrequentWeight = arcFrequentWeight'' + w'
|
||||||
|
, arcGhostFrequent = arcGhostFrequent'
|
||||||
|
}
|
||||||
| Just (_p, x@(_, w), arcRecent') <- HashPSQ.deleteView k arcRecent
|
| Just (_p, x@(_, w), arcRecent') <- HashPSQ.deleteView k arcRecent
|
||||||
-> f (Just x) <&> \(fromMaybe x -> !(force -> x'@(_, w')))
|
-> f (Just x) <&> \case
|
||||||
-> let (arcFrequent', arcFrequentWeight', arcGhostFrequent') = evictToSize (arcMaximumWeight |- arcTargetRecent |- w') arcFrequent arcFrequentWeight arcGhostFrequent
|
Nothing -> oldARC
|
||||||
in oldARC
|
{ arcRecent = arcRecent'
|
||||||
{ arcRecent = arcRecent'
|
, arcGhostRecent = HashPSQ.insert k now () $ evictGhostToCount arcGhostRecent
|
||||||
, arcRecentWeight = arcRecentWeight - w
|
, arcRecentWeight = arcRecentWeight - w
|
||||||
, arcFrequent = HashPSQ.insert k now x' arcFrequent'
|
}
|
||||||
, arcFrequentWeight = arcFrequentWeight' + w'
|
Just !(force -> x'@(_, w'))
|
||||||
, arcGhostFrequent = arcGhostFrequent'
|
-> let (arcFrequent', arcFrequentWeight', arcGhostFrequent') = evictToSize (arcMaximumWeight |- arcTargetRecent |- w') arcFrequent arcFrequentWeight arcGhostFrequent
|
||||||
}
|
in oldARC
|
||||||
|
{ arcRecent = arcRecent'
|
||||||
|
, arcRecentWeight = arcRecentWeight - w
|
||||||
|
, arcFrequent = HashPSQ.insert k now x' arcFrequent'
|
||||||
|
, arcFrequentWeight = arcFrequentWeight' + w'
|
||||||
|
, arcGhostFrequent = arcGhostFrequent'
|
||||||
|
}
|
||||||
| Just (_p, (), arcGhostRecent') <- HashPSQ.deleteView k arcGhostRecent
|
| Just (_p, (), arcGhostRecent') <- HashPSQ.deleteView k arcGhostRecent
|
||||||
-> f Nothing <&> \case
|
-> f Nothing <&> \case
|
||||||
Nothing -> oldARC
|
Nothing -> oldARC
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user