Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Deadlock in DefaultJdbiCache #2274

Closed
stevenschlansker opened this issue Feb 7, 2023 · 1 comment · Fixed by #2275
Closed

Deadlock in DefaultJdbiCache #2274

stevenschlansker opened this issue Feb 7, 2023 · 1 comment · Fixed by #2275
Labels

Comments

@stevenschlansker
Copy link
Member

stevenschlansker commented Feb 7, 2023

Since upgrading to jdbi 3.37.0 with an internal cache, we experience a deadlock:

Thread 37 BLOCKED 'user-server-37': 
java.base@17.0.6/java.util.concurrent.ConcurrentHashMap.replaceNode(ConcurrentHashMap.java:1122)
java.base@17.0.6/java.util.concurrent.ConcurrentHashMap.remove(ConcurrentHashMap.java:1102)
app//org.jdbi.v3.core.cache.internal.DefaultJdbiCache.expunge(DefaultJdbiCache.java:115)
app//org.jdbi.v3.core.cache.internal.DefaultJdbiCache.getWithLoader(DefaultJdbiCache.java:61)
app//org.jdbi.v3.core.statement.SqlStatements.preparedRender(SqlStatements.java:303)
Thread 53 BLOCKED 'user-server-53': 
app//org.jdbi.v3.core.cache.internal.DefaultJdbiCache.lambda$wrapLoader$1(DefaultJdbiCache.java:82)
app//org.jdbi.v3.core.cache.internal.DefaultJdbiCache$$Lambda$961/0x000000080134bf28.create(Unknown Source)
app//org.jdbi.v3.core.cache.internal.DefaultJdbiCache$$Lambda$1909/0x000000080165ca70.apply(Unknown Source)
java.base@17.0.6/java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1708)
app//org.jdbi.v3.core.cache.internal.DefaultJdbiCache.getWithLoader(DefaultJdbiCache.java:57)
app//org.jdbi.v3.core.statement.SqlStatements.preparedRender(SqlStatements.java:303)

Thread A holds expunge lock and calls in to CHM.remove, which takes a bucket lock.
Thread B holds the bucket lock and tries to take the expunge lock.

Looks like a classic lock order reversal.

@stevenschlansker
Copy link
Member Author

cc @hgschmie

hgschmie added a commit to hgschmie/jdbi that referenced this issue Feb 8, 2023
Remove a thread deadlock when expunging under heavy multithread pressure.

Fixes jdbi#2274
hgschmie added a commit to hgschmie/jdbi that referenced this issue Feb 8, 2023
Remove a thread deadlock when expunging under heavy multithread pressure.

Fixes jdbi#2274
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Development

Successfully merging a pull request may close this issue.

1 participant