From c25a4637e84a8dd677a0e9fe178102f9b5a20527 Mon Sep 17 00:00:00 2001 From: Lee Hinman Date: Fri, 26 Jan 2018 11:36:44 -0700 Subject: [PATCH] Ensure total nanosecond time for tasks is at least 1 nanosecond In rare cases the total nanoseconds for an entire window of operations can be 0 nanoseconds, causing the assertion in QueueResizingEsThreadPoolExecutor.calculateLambda to trip. This ensures that we calculate the lambda value with at least 1 nanosecond. Resolves #27607 --- .../util/concurrent/QueueResizingEsThreadPoolExecutor.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/src/main/java/org/elasticsearch/common/util/concurrent/QueueResizingEsThreadPoolExecutor.java b/server/src/main/java/org/elasticsearch/common/util/concurrent/QueueResizingEsThreadPoolExecutor.java index e929192b5dd..b62f93d833d 100644 --- a/server/src/main/java/org/elasticsearch/common/util/concurrent/QueueResizingEsThreadPoolExecutor.java +++ b/server/src/main/java/org/elasticsearch/common/util/concurrent/QueueResizingEsThreadPoolExecutor.java @@ -167,7 +167,7 @@ public final class QueueResizingEsThreadPoolExecutor extends EsThreadPoolExecuto // Calculate the new desired queue size try { - final double lambda = calculateLambda(tasksPerFrame, totalNanos); + final double lambda = calculateLambda(tasksPerFrame, Math.max(totalNanos, 1L)); final int desiredQueueSize = calculateL(lambda, targetedResponseTimeNanos); final int oldCapacity = workQueue.capacity();