From ef5047d64c9409e68b6b6ff20cbd1afb8ecf0191 Mon Sep 17 00:00:00 2001 From: Matt Jacobs Date: Thu, 10 Nov 2016 13:50:35 -0800 Subject: [PATCH] When user has not opted in to letting core/maximum threadpools diverge, ensure dynamic updates to coreSize apply to both --- .../main/java/com/netflix/hystrix/HystrixThreadPool.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/hystrix-core/src/main/java/com/netflix/hystrix/HystrixThreadPool.java b/hystrix-core/src/main/java/com/netflix/hystrix/HystrixThreadPool.java index e812b46ee..26c7a3109 100644 --- a/hystrix-core/src/main/java/com/netflix/hystrix/HystrixThreadPool.java +++ b/hystrix-core/src/main/java/com/netflix/hystrix/HystrixThreadPool.java @@ -221,10 +221,16 @@ private void touchConfig() { boolean maxTooLow = false; if (allowSizesToDiverge && dynamicMaximumSize < dynamicCoreSize) { + //if user sets maximum < core (or defaults get us there), we need to maintain invariant of core <= maximum dynamicMaximumSize = dynamicCoreSize; maxTooLow = true; } + if (!allowSizesToDiverge) { + //if user has not opted in to allowing sizes to diverge, ensure maximum == core + dynamicMaximumSize = dynamicCoreSize; + } + // In JDK 6, setCorePoolSize and setMaximumPoolSize will execute a lock operation. Avoid them if the pool size is not changed. if (threadPool.getCorePoolSize() != dynamicCoreSize || (allowSizesToDiverge && threadPool.getMaximumPoolSize() != dynamicMaximumSize)) { if (maxTooLow) {