Denis Magda created IGNITE-3195: ----------------------------------- Summary: Rebalancing: IgniteConfiguration.rebalanceThreadPoolSize is wrongly treated Key: IGNITE-3195 URL: https://issues.apache.org/jira/browse/IGNITE-3195 Project: Ignite Issue Type: Bug Reporter: Denis Magda Assignee: Anton Vinogradov
Presently it's considered that the maximum number of threads that has to process all demand and supply messages coming from all the nodes must not be bigger than {{IgniteConfiguration.rebalanceThreadPoolSize}}. Current implementation relies on ordered messages functionality creating a number of topics equal to {{IgniteConfiguration.rebalanceThreadPoolSize}}. However, the implementation doesn't take into account that ordered messages, that correspond to a particular topic, are processed in parallel for different nodes. Refer to the implementation of {{GridIoManager.processOrderedMessage}} to see that for every topic there will be a unique {{GridCommunicationMessageSet}} for every node. Also to prove that this is true you can refer to this execution stack {noformat} java.lang.RuntimeException: HAPPENED DEMAND at org.apache.ignite.internal.processors.cache.GridCachePartitionExchangeManager$5.apply(GridCachePartitionExchangeManager.java:378) at org.apache.ignite.internal.processors.cache.GridCachePartitionExchangeManager$5.apply(GridCachePartitionExchangeManager.java:364) at org.apache.ignite.internal.processors.cache.GridCacheIoManager.processMessage(GridCacheIoManager.java:622) at org.apache.ignite.internal.processors.cache.GridCacheIoManager.onMessage0(GridCacheIoManager.java:320) at org.apache.ignite.internal.processors.cache.GridCacheIoManager.access$300(GridCacheIoManager.java:81) at org.apache.ignite.internal.processors.cache.GridCacheIoManager$OrderedMessageListener.onMessage(GridCacheIoManager.java:1125) at org.apache.ignite.internal.managers.communication.GridIoManager.invokeListener(GridIoManager.java:1219) at org.apache.ignite.internal.managers.communication.GridIoManager.access$1600(GridIoManager.java:105) at org.apache.ignite.internal.managers.communication.GridIoManager$GridCommunicationMessageSet.unwind(GridIoManager.java:2456) at org.apache.ignite.internal.managers.communication.GridIoManager.unwindMessageSet(GridIoManager.java:1179) at org.apache.ignite.internal.managers.communication.GridIoManager.access$1900(GridIoManager.java:105) at org.apache.ignite.internal.managers.communication.GridIoManager$6.run(GridIoManager.java:1148) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745) {noformat} All this means that in fact the number of threads that will be busy with replication activity will be equal to {{IgniteConfiguration.rebalanceThreadPoolSize}} x number_of_nodes_participated_in_rebalancing -- This message was sent by Atlassian JIRA (v6.3.4#6332)