Close unnecessary connections (#13177)

This commit is contained in:
Mohit Yadav 2023-09-13 18:37:36 +05:30 committed by GitHub
parent 5a6310eff9
commit c5edf37cfe
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 30 additions and 18 deletions

View File

@ -9,6 +9,8 @@ public interface JdbiHandleManager {
Handle get();
boolean handleExists();
void clear();
default ThreadFactory createThreadFactory() {

View File

@ -94,13 +94,9 @@ public class JdbiTransactionManager {
}
public void terminateHandle() {
if (IN_TRANSACTION_HANDLES.contains(handleManager.get().hashCode())) {
if (handleManager.handleExists()) {
IN_TRANSACTION_HANDLES.remove(handleManager.get().hashCode());
handleManager.clear();
}
IN_TRANSACTION_HANDLES.remove(handleManager.get().hashCode());
}
public boolean containsHandle(int hashCode) {
return IN_TRANSACTION_HANDLES.contains(hashCode);
}
}

View File

@ -57,6 +57,12 @@ class LinkedRequestScopedJdbiHandleManager implements JdbiHandleManager {
return handle;
}
@Override
public boolean handleExists() {
// TODO
return false;
}
@Override
public void clear() {
String parent = getConversationId();

View File

@ -38,23 +38,26 @@ public class ManagedHandleInvocationHandler<T> implements InvocationHandler {
}
private Object handleInvocation(Method method, Object[] args) throws Throwable {
Handle handle = JdbiUnitOfWorkProvider.getInstance().getHandle();
LOG.debug(
"{}.{} [{}] Thread Id [{}] with handle id [{}]",
method.getDeclaringClass().getSimpleName(),
method.getName(),
underlying.getSimpleName(),
Thread.currentThread().getId(),
handle.hashCode());
if (CollectionDAO.class.isAssignableFrom(underlying) && method.isAnnotationPresent(CreateSqlObject.class)) {
return getWrappedInstanceForDaoClass(method.getReturnType());
} else {
if (!JdbiTransactionManager.getInstance().containsHandle(handle.hashCode())) {
Object dao;
if (JdbiUnitOfWorkProvider.getInstance().getHandleManager().handleExists()) {
Handle handle = JdbiUnitOfWorkProvider.getInstance().getHandle();
LOG.debug(
"{}.{} [{}] Thread Id [{}] with handle id [{}]",
method.getDeclaringClass().getSimpleName(),
method.getName(),
underlying.getSimpleName(),
Thread.currentThread().getId(),
handle.hashCode());
dao = handle.attach(underlying);
} else {
// This is non-transactional request
handle.getConnection().setAutoCommit(true);
dao = JdbiUnitOfWorkProvider.getInstance().getHandleManager().getJdbi().onDemand(underlying);
}
Object dao = handle.attach(underlying);
try {
return method.invoke(dao, args);
} catch (Exception ex) {

View File

@ -30,6 +30,11 @@ class RequestScopedJdbiHandleManager implements JdbiHandleManager {
return handle;
}
@Override
public boolean handleExists() {
return threadLocal.get() != null;
}
@Override
public void clear() {
Handle handle = threadLocal.get();