"When receiver is invoked for key K, it’s holding the lock for K." is not correct, at least in the 2.4 code.
When a custom stream receiver is called, the data streamer thread has a read-lock preventing termination, and there is a real-lock on the topology, but DataStreamerUpdateJob.call() does not get any per entry locks. Since the DataStreamer threads are in a separate pool, a custom stream receiver should be able to make any calls that a client can w/o fear of deadlock. -- Sent from: http://apache-ignite-users.70518.x6.nabble.com/