diff --git a/modules/dcache-qos/src/main/java/org/dcache/qos/services/verifier/handlers/VerifyOperationHandler.java b/modules/dcache-qos/src/main/java/org/dcache/qos/services/verifier/handlers/VerifyOperationHandler.java index 1f89fb7691d..81fb796a20d 100644 --- a/modules/dcache-qos/src/main/java/org/dcache/qos/services/verifier/handlers/VerifyOperationHandler.java +++ b/modules/dcache-qos/src/main/java/org/dcache/qos/services/verifier/handlers/VerifyOperationHandler.java @@ -74,6 +74,7 @@ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING import java.time.temporal.ChronoUnit; import java.util.Set; import java.util.concurrent.ExecutorService; +import java.util.concurrent.Semaphore; import org.dcache.alarms.AlarmMarkerFactory; import org.dcache.alarms.PredefinedAlarm; import org.dcache.qos.QoSException; @@ -198,6 +199,11 @@ private static void sendOutOfSyncAlarm() { */ private ExecutorService updateExecutor; + /** + * Throttles requests to engine. + */ + private Semaphore semaphore; + /** * Statistics. */ @@ -330,7 +336,13 @@ public void handleVerification(PnfsId pnfsId) { FileQoSUpdate data = new FileQoSUpdate(operation.getPnfsId(), operation.getPrincipalPool(), operation.getMessageType()); - requirements = requirementsListener.fileQoSRequirementsRequested(data); + + semaphore.acquire(); + try { + requirements = requirementsListener.fileQoSRequirementsRequested(data); + } finally { + semaphore.release(); + } if (requirements == null) { if (operation.getMessageType() == CLEAR_CACHE_LOCATION) { @@ -500,6 +512,10 @@ public void setManager(VerifyOperationManager manager) { this.manager = manager; } + public void setMaxConcurrentRequirementRequests(int maxRequests) { + semaphore = new Semaphore(maxRequests); + } + public void setPoolInfoMap(PoolInfoMap poolInfoMap) { this.poolInfoMap = poolInfoMap; } diff --git a/modules/dcache-qos/src/main/resources/org/dcache/qos/qos-verifier.xml b/modules/dcache-qos/src/main/resources/org/dcache/qos/qos-verifier.xml index 6747df35af4..9106d47bbd7 100644 --- a/modules/dcache-qos/src/main/resources/org/dcache/qos/qos-verifier.xml +++ b/modules/dcache-qos/src/main/resources/org/dcache/qos/qos-verifier.xml @@ -286,6 +286,7 @@ + diff --git a/skel/share/defaults/dcache.properties b/skel/share/defaults/dcache.properties index 5f63671deb2..c0bbb393d76 100644 --- a/skel/share/defaults/dcache.properties +++ b/skel/share/defaults/dcache.properties @@ -83,6 +83,9 @@ dcache.log.zookeeper.max-history=30 # How many days to keep resilience logs dcache.log.resilience.max-history=30 +How many days to keep resilience logs +dcache.log.qos.max-history=30 + # Host on which the remote log server will run # relative to this dCache installation #