Thank you for your answer,
Maybe I use region config the wrong way.
There are two apps(more apps with different roles) with different ignite
configs,
first App
:set default region with persistence enable
:set cache a,with nodefilter in first apps,default region
second app
:set default region with persistence disable
:just access cache a with query
start first app instance 1,second app instance 2,and first app instance 3.
then close 1,
then restart 1, the deadlock will happes
fyi, I use ignitelock in first apps when process ignite discovery event such
as join event. when a new node join, apps 1,3 will receive join message by
local event listener, but I just want one node to process the message, so i
use it like this:
if (globalLock.tryLock()) {
LOGGER.info("------ hold global lock ");
try {
switch (event.type()) {
case EventType.EVT_NODE_JOINED:
joinListener.onMessage(clusterNode);
break;
case EventType.EVT_NODE_FAILED:
case EventType.EVT_NODE_LEFT:
leftListener.onMessage(clusterNode);
break;
default:
LOGGER.info("ignore discovery event: {}",
event);
break;
}
} finally {
LOGGER.debug("------ process event done ");
// don't unlock until node left
// globalLock.unlock();
}
}
the node which hold the globalLock will never unlock unless it left, Is it
the right way with lock
--
Sent from: http://apache-ignite-users.70518.x6.nabble.com/