[ https://issues.apache.org/jira/browse/BOOKKEEPER-1065?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16007126#comment-16007126 ]
ASF GitHub Bot commented on BOOKKEEPER-1065: -------------------------------------------- Github user merlimat commented on the issue: https://github.com/apache/bookkeeper/pull/152 I got a bit scared when I saw `ScheduledThreadPoolExecutor` is pass `MAX_INT` as the max thread pool size.. but I think the current code is correct. I just did a quick verification and indeed it doesn't create more than one thread : ```java public static void main(String[] args) { ScheduledThreadPoolExecutor e = new ScheduledThreadPoolExecutor(1, new ThreadFactoryBuilder().setNameFormat("test-%d").build()); for (int i = 0; i < 10; i++) { final int n = i; e.submit(() -> { System.out.println( Thread.currentThread().getName() + " | Start task " + n); try { Thread.sleep(1000); System.out.println( Thread.currentThread().getName() + " | Done task " + n); } catch (InterruptedException e1) { e1.printStackTrace(); } }); } e.shutdown(); } ``` Closing this PR as no fix is needed > OrderedSafeExecutor should only have 1 thread per bucket > -------------------------------------------------------- > > Key: BOOKKEEPER-1065 > URL: https://issues.apache.org/jira/browse/BOOKKEEPER-1065 > Project: Bookkeeper > Issue Type: Bug > Reporter: Matteo Merli > Assignee: Matteo Merli > Fix For: 4.5.0 > > > In a earlier commit, "BOOKKEEPER-874: Explict LAC from Writer to Bookie", > there was this change in the OrderedSafeExecutor implementation: > {noformat} > for (int i = 0; i < numThreads; i++) { > - queues[i] = new LinkedBlockingQueue<Runnable>(); > - threads[i] = new ThreadPoolExecutor(1, 1, > - 0L, TimeUnit.MILLISECONDS, queues[i], > + threads[i] = new ScheduledThreadPoolExecutor(1, > new ThreadFactoryBuilder() > .setNameFormat(name + "-orderedsafeexecutor-" + i + > "-%d") > .setThreadFactory(threadFactory) > .build()); > + threads[i].setMaximumPoolSize(1); > {noformat} > Then, as part of "BOOKKEEPER-1013: Fix findbugs errors on latest master", the > max pool size line has been removed. > {noformat} > @@ -183,7 +183,6 @@ public class OrderedSafeExecutor { > .setNameFormat(name + "-orderedsafeexecutor-" + i + > "-%d") > .setThreadFactory(threadFactory) > .build()); > - threads[i].setMaximumPoolSize(1); > // Save thread ids > final int idx = i; > {noformat} > Without that the thread pool would create multiple threads for the same > bucket, breaking the ordering guarantee of the executor. -- This message was sent by Atlassian JIRA (v6.3.15#6346)