use cached thread pool for async hooks to improve memory consumption

This commit is contained in:
Sebastian Sdorra
2012-08-12 21:52:24 +02:00
parent 5963cbd536
commit 7c770d8874

View File

@@ -72,6 +72,8 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
import java.util.UUID; import java.util.UUID;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
@@ -105,8 +107,8 @@ public class DefaultRepositoryManager extends AbstractRepositoryManager
* @param repositoryHooksProvider * @param repositoryHooksProvider
*/ */
@Inject @Inject
public DefaultRepositoryManager( public DefaultRepositoryManager(ScmConfiguration configuration,
ScmConfiguration configuration, SCMContextProvider contextProvider, SCMContextProvider contextProvider,
Provider<WebSecurityContext> securityContextProvider, Provider<WebSecurityContext> securityContextProvider,
RepositoryDAO repositoryDAO, Set<RepositoryHandler> handlerSet, RepositoryDAO repositoryDAO, Set<RepositoryHandler> handlerSet,
Provider<Set<RepositoryListener>> repositoryListenersProvider, Provider<Set<RepositoryListener>> repositoryListenersProvider,
@@ -117,6 +119,7 @@ public class DefaultRepositoryManager extends AbstractRepositoryManager
this.repositoryDAO = repositoryDAO; this.repositoryDAO = repositoryDAO;
this.repositoryListenersProvider = repositoryListenersProvider; this.repositoryListenersProvider = repositoryListenersProvider;
this.repositoryHooksProvider = repositoryHooksProvider; this.repositoryHooksProvider = repositoryHooksProvider;
this.executorService = Executors.newCachedThreadPool();
handlerMap = new HashMap<String, RepositoryHandler>(); handlerMap = new HashMap<String, RepositoryHandler>();
types = new HashSet<Type>(); types = new HashSet<Type>();
@@ -137,6 +140,8 @@ public class DefaultRepositoryManager extends AbstractRepositoryManager
@Override @Override
public void close() throws IOException public void close() throws IOException
{ {
executorService.shutdown();
for (RepositoryHandler handler : handlerMap.values()) for (RepositoryHandler handler : handlerMap.values())
{ {
IOUtil.close(handler); IOUtil.close(handler);
@@ -807,15 +812,14 @@ public class DefaultRepositoryManager extends AbstractRepositoryManager
{ {
if (hook.isAsync()) if (hook.isAsync())
{ {
new Thread(new RepositoryHookTask(hook, event)).start(); executorService.execute(new RepositoryHookTask(hook, event));
} }
else else
{ {
if (logger.isDebugEnabled()) if (logger.isDebugEnabled())
{ {
Object[] args = new Object[] { event.getType(), Object[] args = new Object[] { event.getType(),
hook.getClass().getName(), hook.getClass().getName(), event.getRepository().getName() };
event.getRepository().getName() };
logger.debug("execute {} hook {} for repository {}", args); logger.debug("execute {} hook {} for repository {}", args);
} }
@@ -957,6 +961,9 @@ public class DefaultRepositoryManager extends AbstractRepositoryManager
/** Field description */ /** Field description */
private ScmConfiguration configuration; private ScmConfiguration configuration;
/** Field description */
private ExecutorService executorService;
/** Field description */ /** Field description */
private Map<String, RepositoryHandler> handlerMap; private Map<String, RepositoryHandler> handlerMap;