ignite-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Stanislav Lukyanov <stanlukya...@gmail.com>
Subject RE: Deadlock during cache loading
Date Fri, 22 Jun 2018 16:39:23 GMT
Well, that’s diving a bit deeper than the “don’t do cache operations” rule of thumb,
but let’s do that.

When receiver is invoked for key K, it’s holding the lock for K.
It is safe to do invoke on that K (especially if you control the invoked code) since it is
locked already.
But it is not safe to call invoke on another key J – because someone holding the lock for
J might be doing the same for K, leading to a deadlock.

I believe it is really awkward to micromanage these locks, so the best practice is to avoid
starting any cache operations (or, more general, any locking operations – including put()/get())
from the system pool threads, i.e. when executing things like StreamReceiver, Coninious Query
listener, invoke() closure, etc – basically anything that is intercepting a cache operation.

Thanks,
Stan

From: breischl
Sent: 22 июня 2018 г. 18:09
To: user@ignite.apache.org
Subject: RE: Deadlock during cache loading

Hi Stan,
  Thanks for taking a look. I'm having trouble finding anywhere that it's
documented what I can or can't call inside a receiver. Is it just
put()/get() that are allowed? 

  Also, I noticed that the default StreamTransformer implementation calls
invoke() from within a receiver. So is that broken/deadlock-prone as well?

https://github.com/apache/ignite/blob/master/modules/core/src/main/java/org/apache/ignite/stream/StreamTransformer.java#L50-L53

Thanks!
BKR



--
Sent from: http://apache-ignite-users.70518.x6.nabble.com/


Mime
View raw message