Merge branch 'release/os/4.9' into cc/merge/os-4.9/os-4.10/28-Nov-2022

Fwd-merge from OS-4.9.
This commit is contained in:
Chris Cochrane 2022-11-28 13:14:07 +00:00
commit 563a7fb6c1
No known key found for this signature in database
GPG Key ID: 4D4602B5BBC63950
2 changed files with 10 additions and 2 deletions

View File

@ -73,7 +73,7 @@ class InfrequentlyMutatedCache<K : Any, V : Any>(name: String, cacheFactory: Nam
backingCache.invalidateAll()
}
private fun invalidate(key: K, value: Wrapper.Invalidated<V>): Wrapper.Invalidated<V> {
private fun invalidate(key: K, value: Wrapper.Invalidated<V>): Wrapper.Invalidated<V>? {
val tx = contextTransactionOrNull
value.invalidators.incrementAndGet()
currentlyInvalid[key] = value
@ -81,7 +81,10 @@ class InfrequentlyMutatedCache<K : Any, V : Any>(name: String, cacheFactory: Nam
// When we close, we can't start using caching again until all simultaneously open transactions are closed.
tx.onClose { tx.database.onAllOpenTransactionsClosed { decrementInvalidators(key, value) } }
} else {
decrementInvalidators(key, value)
if (value.invalidators.decrementAndGet() == 0) {
currentlyInvalid.remove(key)
return null
}
}
return value
}

View File

@ -25,6 +25,11 @@ class InfrequentlyMutatedCacheTest {
database.close()
}
@Test(timeout = 300_000)
fun `invalidate outside transaction should not hang`() {
cache.invalidate("Fred")
}
@Test(timeout=300_000)
fun `get from empty cache returns result of loader`() {
database.transaction {