mirror of
https://github.com/open-metadata/OpenMetadata.git
synced 2025-07-23 09:22:18 +00:00
Close unnecessary connections (#13177)
This commit is contained in:
parent
5a6310eff9
commit
c5edf37cfe
@ -9,6 +9,8 @@ public interface JdbiHandleManager {
|
||||
|
||||
Handle get();
|
||||
|
||||
boolean handleExists();
|
||||
|
||||
void clear();
|
||||
|
||||
default ThreadFactory createThreadFactory() {
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -57,6 +57,12 @@ class LinkedRequestScopedJdbiHandleManager implements JdbiHandleManager {
|
||||
return handle;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean handleExists() {
|
||||
// TODO
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clear() {
|
||||
String parent = getConversationId();
|
||||
|
@ -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) {
|
||||
|
@ -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();
|
||||
|
Loading…
x
Reference in New Issue
Block a user