You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The caching protocol is such that to update a partial result with more domains it has to be re-set.
While the LRU implementation evicts after insertion, the S3 and SIEVE insertions first make room for an entry, then insert the new entry.
For partial entry this is unnecessary, and can create odd states where there are multiple entries in the fifo with different data but the same key. Instead, since the cache entries are mutable (unlike the results) the value should simply be updated in place. The hit has already been recorded since the __getitem__ which retrieved the partial entry.
Beware: in S3, do not confuse a cache hit with a ghost cache hit, the second should not suppress the insertion.
The text was updated successfully, but these errors were encountered:
`*Result` objects are immutable, thus if a `PartialResult` gets filled
further it has to be re-set into the cache.
This does not change the cache size, but because the current S3 and
SIEVE implementations unconditionally check the cache size on
`__setitem__` they may evict an entry unnecessarily.
Fix that: if there is already a valid cache entry for the key, just
update it in place instead of trying to evict then creating a brand
new entry.
Also update the LRU to pre-check for size (and presence as well), this
may make setting a bit more expensive than post-check but it avoids
"wronging" the user by bypassing the limit they set.
Fixesua-parser#201
`*Result` objects are immutable, thus if a `PartialResult` gets filled
further it has to be re-set into the cache.
This does not change the cache size, but because the current S3 and
SIEVE implementations unconditionally check the cache size on
`__setitem__` they may evict an entry unnecessarily.
Fix that: if there is already a valid cache entry for the key, just
update it in place instead of trying to evict then creating a brand
new entry.
Also update the LRU to pre-check for size (and presence as well), this
may make setting a bit more expensive than post-check but it avoids
"wronging" the user by bypassing the limit they set.
Fixes#201
The caching protocol is such that to update a partial result with more domains it has to be re-set.
While the LRU implementation evicts after insertion, the S3 and SIEVE insertions first make room for an entry, then insert the new entry.
For partial entry this is unnecessary, and can create odd states where there are multiple entries in the fifo with different data but the same key. Instead, since the cache entries are mutable (unlike the results) the
value
should simply be updated in place. The hit has already been recorded since the__getitem__
which retrieved the partial entry.Beware: in S3, do not confuse a cache hit with a ghost cache hit, the second should not suppress the insertion.
The text was updated successfully, but these errors were encountered: