mirror of
https://github.com/open-metadata/OpenMetadata.git
synced 2025-07-23 17:30:35 +00:00
Close unnecessary connections (#13177)
This commit is contained in:
parent
5a6310eff9
commit
c5edf37cfe
@ -9,6 +9,8 @@ public interface JdbiHandleManager {
|
|||||||
|
|
||||||
Handle get();
|
Handle get();
|
||||||
|
|
||||||
|
boolean handleExists();
|
||||||
|
|
||||||
void clear();
|
void clear();
|
||||||
|
|
||||||
default ThreadFactory createThreadFactory() {
|
default ThreadFactory createThreadFactory() {
|
||||||
|
@ -94,13 +94,9 @@ public class JdbiTransactionManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void terminateHandle() {
|
public void terminateHandle() {
|
||||||
if (IN_TRANSACTION_HANDLES.contains(handleManager.get().hashCode())) {
|
if (handleManager.handleExists()) {
|
||||||
|
IN_TRANSACTION_HANDLES.remove(handleManager.get().hashCode());
|
||||||
handleManager.clear();
|
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;
|
return handle;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean handleExists() {
|
||||||
|
// TODO
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void clear() {
|
public void clear() {
|
||||||
String parent = getConversationId();
|
String parent = getConversationId();
|
||||||
|
@ -38,23 +38,26 @@ public class ManagedHandleInvocationHandler<T> implements InvocationHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private Object handleInvocation(Method method, Object[] args) throws Throwable {
|
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)) {
|
if (CollectionDAO.class.isAssignableFrom(underlying) && method.isAnnotationPresent(CreateSqlObject.class)) {
|
||||||
return getWrappedInstanceForDaoClass(method.getReturnType());
|
return getWrappedInstanceForDaoClass(method.getReturnType());
|
||||||
} else {
|
} 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
|
// This is non-transactional request
|
||||||
handle.getConnection().setAutoCommit(true);
|
dao = JdbiUnitOfWorkProvider.getInstance().getHandleManager().getJdbi().onDemand(underlying);
|
||||||
}
|
}
|
||||||
Object dao = handle.attach(underlying);
|
|
||||||
try {
|
try {
|
||||||
return method.invoke(dao, args);
|
return method.invoke(dao, args);
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
|
@ -30,6 +30,11 @@ class RequestScopedJdbiHandleManager implements JdbiHandleManager {
|
|||||||
return handle;
|
return handle;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean handleExists() {
|
||||||
|
return threadLocal.get() != null;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void clear() {
|
public void clear() {
|
||||||
Handle handle = threadLocal.get();
|
Handle handle = threadLocal.get();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user