I was expecting to start two slaves and then to start master which will get things going! However, when I start two slaves, tests start by themselves? Also, you are still doing multithreading in your RWDistributable. RWDistributable gets migrated to execution nodes and call method gets invoked. Call method should not start any threads, but you start thread pools in both testSingleThreadedWritesWithinDistCallable and testMTWritesWithinDistCallable.
Please simplify this test further and will get to the bottom of this!
Thanks for the response. I missed the thread being spawned for read purposes from testSingleThreadedWritesWithinDistCallable()--I've got it hard-coded to call that method.
I removed the ExecutorService logic. After doing this, the test case worked consistently 30+ times. That is significant progress.
Now, the next question is one of how to achieve greater concurrency. The obvious answer is to add more JVMs to the cluster (probably with smaller Java Heap sizes). But, this leaves us with a single thread executing inside of each JVM for the DistributedCallable#call() method.
Is there anyway to achieve greater concurrency inside of a single JVM with Infinispan using 5.x? Without this, Infinispan may not meet the clients needs.
Excellent, I am very glad that we got to the bottom of this one!
While admitting that it would be great to have multi-threaded distributed callable, you can create more smaller tasks and send them across the cluster for execution, can you? I'd say that distributed execution at this current edition should suffice for many uses cases and in the next major release we will address multi-threaded distributed callable!
|Retrieving data ...|