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/

Reply via email to