Merge pull request #7275 from corda/parkri/ENT-8817-compute-deadlocks

ENT-8817 OS port of compute deadlock changes
This commit is contained in:
Adel El-Beik 2022-11-25 13:07:19 +00:00 committed by GitHub
commit 23b872db17
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
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 {