diff --git a/repository/src/main/java/org/alfresco/repo/rendition2/LocalTransformClient.java b/repository/src/main/java/org/alfresco/repo/rendition2/LocalTransformClient.java index 30c65bc63e..5fab105b61 100644 --- a/repository/src/main/java/org/alfresco/repo/rendition2/LocalTransformClient.java +++ b/repository/src/main/java/org/alfresco/repo/rendition2/LocalTransformClient.java @@ -34,6 +34,7 @@ import java.util.Map; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; +import com.google.common.util.concurrent.ThreadFactoryBuilder; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.beans.factory.InitializingBean; @@ -66,6 +67,7 @@ public class LocalTransformClient implements TransformClient, InitializingBean private ContentService contentService; private RenditionService2Impl renditionService2; private boolean directAccessUrlEnabled; + private int threadPoolSize; private ExecutorService executorService; private ThreadLocal transform = new ThreadLocal<>(); @@ -95,6 +97,11 @@ public class LocalTransformClient implements TransformClient, InitializingBean this.directAccessUrlEnabled = directAccessUrlEnabled; } + public void setThreadPoolSize(int threadPoolSize) + { + this.threadPoolSize = threadPoolSize; + } + public void setExecutorService(ExecutorService executorService) { this.executorService = executorService; @@ -108,9 +115,11 @@ public class LocalTransformClient implements TransformClient, InitializingBean PropertyCheck.mandatory(this, "contentService", contentService); PropertyCheck.mandatory(this, "renditionService2", renditionService2); PropertyCheck.mandatory(this, "directAccessUrlEnabled", directAccessUrlEnabled); + PropertyCheck.mandatory(this, "threadPoolSize", threadPoolSize); if (executorService == null) { - executorService = Executors.newCachedThreadPool(); + var threadFactory = new ThreadFactoryBuilder().setNameFormat("local-transform-%d").build(); + executorService = Executors.newFixedThreadPool(threadPoolSize, threadFactory); } } diff --git a/repository/src/main/resources/alfresco/rendition-services2-context.xml b/repository/src/main/resources/alfresco/rendition-services2-context.xml index 73611a3ea8..b207f15dc7 100644 --- a/repository/src/main/resources/alfresco/rendition-services2-context.xml +++ b/repository/src/main/resources/alfresco/rendition-services2-context.xml @@ -82,6 +82,7 @@ + diff --git a/repository/src/main/resources/alfresco/repository.properties b/repository/src/main/resources/alfresco/repository.properties index d65dfb5ef1..fe6889a2ee 100644 --- a/repository/src/main/resources/alfresco/repository.properties +++ b/repository/src/main/resources/alfresco/repository.properties @@ -1351,6 +1351,9 @@ restApi.directAccessUrl.defaultExpiryTimeInSec=30 # Controls whether direct access url URLs may be used in transforms. local.transform.directAccessUrl.enabled=true +# Controls size of thread pool used for transforms. +local.transform.threadPoolSize=8 + # Creates additional indexes on alf_node and alf_transaction. Recommended for large repositories. system.new-node-transaction-indexes.ignored=true