Igniters,

We have one well-known limitation: one distributed opeartion cannot be
executed from within another if they both end up in the same pool, because
it will lead to starvation and hang. Most notable example - running data
streamer from compute task.

Users with complex logic will have the same issue if they want to execute
one job from another. I think it could be resolved with introduction of
custom executors and routing computing jobs to them.

Config:
ExecutorConfiguration execCfg = new
ExecutorConfiguration().setName("myExecutor").setThreads(8);

Starting MR:
ignite.compute().withExecutor("myExecutor").execute(...);

Another improvement we can apply here is managed blockers, similar to
ForkJoinPool.ManagedBlocker [1]. If user is to execute distributed
operation, he can infrom us about it, and we will compensate blocked thread
with a new one.

Thoughts?

[1]
https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ForkJoinPool.ManagedBlocker.html

Reply via email to