I was looking at the DistributedExecutionCompletionService API, and there seems to be a feature missing. A powerful advantage of the DistributedExecutorService is the ability to execute commands on the primary data owner. I'd like to be able to execute multiple tasks on the key's primary data owner in parallel.
Basically, add this to the completion service API. Looks trivial enough to do.
submit(Callable<V> task, K... inputKeys)
|Retrieving data ...|