[
https://issues.apache.org/jira/browse/IGNITE-8689?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Vyacheslav Koptilin updated IGNITE-8689:
----------------------------------------
Description:
Let's consider the following scenario:
* Start a new node (node 'A') and create a new partitioned cache that resides
on that node
{code:java}
Ignite ignite = Ignition.start("examples/config/segmentation/node-A.xml");
IgniteCache<String, String> cache = ignite.getOrCreateCache(new
CacheConfiguration<String, String>()
.setName("default")
.setIndexedTypes(String.class, String.class)
.setNodeFilter(new NodeFilter())
);
public class NodeFilter implements IgnitePredicate<ClusterNode> {
@Override public boolean apply(ClusterNode node) {
return node.attribute("test.attribute").equals("first-node");
}
}{code}
* Start the second node (node 'B') with a custom connector configuration:
{code:java}
<property name="clientConnectorConfiguration">
<bean class="org.apache.ignite.configuration.ClientConnectorConfiguration">
<property name="host" value="127.0.0.1"/>
<property name="port" value="22222"/>
<property name="portRange" value="10"/>
</bean>
</property>
Ignite ignite = Ignition.start("examples/config/segmentation/node-B.xml");
Executors.newScheduledThreadPool(1).schedule(
new Runnable() {
@Override public void run() {
DiscoverySpi spi = ignite.configuration().getDiscoverySpi();
spi.failNode(ignite.cluster().localNode().id(), "test message");
}
},
30,
TimeUnit.SECONDS);{code}
* Execute simple SQL query using sqlline for example (JDBC driver should be
connected to the node 'B')
{code:java}
./sqlline.sh --verbose=true -u jdbc:ignite:thin://127.0.0.1:22222
select * from UNKNOWN_TABLE;{code}
In that case, {{IgniteH2Indexing.prepareStatement()}} throws
{{SQLException(Table is not found)}} and the implementation tries to start
caches that are not started yet by sending
{{ClientCacheChangeDummyDiscoveryMessage}} to 'discovery-worker' thread,
which in turn posts that message to 'exchange-worker' thread.
Assume that while processing of {{ClientCacheChangeDummyDiscoveryMessage}} by
the 'exchange-worker', the discovery thread receives {{EVT_NODE_FAILED}} (as a
result of segmentation) and so {{DiscoCache}} history is updated by removing
the failed node from the list of alive nodes.
At the same time, 'exchange-worker' detects that there is only one alive node
(node 'B' in our case) and mistakenly believes that node 'B' is a coordinator:
{code:java|title=CacheAffinitySharedManager.java}
void processClientCachesChanges(ClientCacheChangeDummyDiscoveryMessage msg)
{
AffinityTopologyVersion topVer = cctx.exchange().readyAffinityVersion();
DiscoCache discoCache = cctx.discovery().discoCache(topVer);
boolean crd =
cctx.localNode().equals(discoCache.oldestAliveServerNode()); // discoCache
contains only the one node!
Map<Integer, Boolean> startedCaches =
processClientCacheStartRequests(msg, crd, topVer, discoCache);
Set<Integer> closedCaches = processCacheCloseRequests(msg, crd, topVer);
if (startedCaches != null || closedCaches != null)
scheduleClientChangeMessage(startedCaches, closedCaches);
}
{code}
and results in the following {{NullPointerException}}:
{code:java}
[19:25:57,019][ERROR][exchange-worker-#42][GridCachePartitionExchangeManager]
Failed to process custom exchange task: ClientCacheChangeDummyDiscoveryMessage
[reqId=8c7904a2-4b70-4614-bf7b-f4434d274c30, cachesToClose=null,
startCaches=[default-segmented]]
java.lang.NullPointerException
at
org.apache.ignite.internal.processors.cache.CacheAffinitySharedManager.processClientCacheStartRequests(CacheAffinitySharedManager.java:458)
at
org.apache.ignite.internal.processors.cache.CacheAffinitySharedManager.processClientCachesChanges(CacheAffinitySharedManager.java:621)
at
org.apache.ignite.internal.processors.cache.GridCacheProcessor.processCustomExchangeTask(GridCacheProcessor.java:363)
at
org.apache.ignite.internal.processors.cache.GridCachePartitionExchangeManager$ExchangeWorker.processCustomTask(GridCachePartitionExchangeManager.java:2207)
at
org.apache.ignite.internal.processors.cache.GridCachePartitionExchangeManager$ExchangeWorker.body(GridCachePartitionExchangeManager.java:2296)
at org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:110)
at java.lang.Thread.run(Thread.java:748)
{code}
As a result, the node cannot be stopped due to the following reasons:
* 'exchange' thread throws {{NullPointerException}} and therefore does not
complete {{DynamicCacheStartFuture}}
* 'Client connector' thread is blocked on {{DynamicCacheStatrt.get()}} method
which never returns control
* the thread which performs node stopping process is blocked on {{busyLock}}
Please see the following thread dump:
{code:java}
"Thread-117" #734 prio=5 os_prio=0 tid=0x0000558b117a9000 nid=0x437 waiting on
condition [0x00007f2466ba1000]
java.lang.Thread.State: TIMED_WAITING (sleeping)
at java.lang.Thread.sleep(Native Method)
at
org.apache.ignite.internal.util.GridSpinReadWriteLock.writeLock(GridSpinReadWriteLock.java:206)
at
org.apache.ignite.internal.util.GridSpinBusyLock.block(GridSpinBusyLock.java:76)
at
org.apache.ignite.internal.processors.odbc.ClientListenerProcessor.onKernalStop(ClientListenerProcessor.java:224)
at org.apache.ignite.internal.IgniteKernal.stop0(IgniteKernal.java:2146)
at org.apache.ignite.internal.IgniteKernal.stop(IgniteKernal.java:2094)
at
org.apache.ignite.internal.IgnitionEx$IgniteNamedInstance.stop0(IgnitionEx.java:2545)
- locked <0x00000004c0326278> (a
org.apache.ignite.internal.IgnitionEx$IgniteNamedInstance)
at
org.apache.ignite.internal.IgnitionEx$IgniteNamedInstance.stop(IgnitionEx.java:2508)
at org.apache.ignite.internal.IgnitionEx.stop(IgnitionEx.java:365)
at org.apache.ignite.Ignition.stop(Ignition.java:229)
at
org.apache.ignite.internal.managers.discovery.GridDiscoveryManager$10.run(GridDiscoveryManager.java:2385)
at java.lang.Thread.run(Thread.java:748)
"client-connector-#186" #240 prio=5 os_prio=0 tid=0x0000558b12afd000 nid=0x249
waiting on condition [0x00007f246667f000]
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:304)
at
org.apache.ignite.internal.util.future.GridFutureAdapter.get0(GridFutureAdapter.java:177)
at
org.apache.ignite.internal.util.future.GridFutureAdapter.get(GridFutureAdapter.java:140)
at
org.apache.ignite.internal.processors.cache.GridCacheProcessor.createMissingQueryCaches(GridCacheProcessor.java:3947)
at
org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing.prepareStatementAndCaches(IgniteH2Indexing.java:2015)
at
org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing.parseAndSplit(IgniteH2Indexing.java:1794)
at
org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing.querySqlFields(IgniteH2Indexing.java:1650)
at
org.apache.ignite.internal.processors.query.GridQueryProcessor$4.applyx(GridQueryProcessor.java:2037)
at
org.apache.ignite.internal.processors.query.GridQueryProcessor$4.applyx(GridQueryProcessor.java:2032)
at
org.apache.ignite.internal.util.lang.IgniteOutClosureX.apply(IgniteOutClosureX.java:36)
at
org.apache.ignite.internal.processors.query.GridQueryProcessor.executeQuery(GridQueryProcessor.java:2580)
at
org.apache.ignite.internal.processors.query.GridQueryProcessor.querySqlFields(GridQueryProcessor.java:2046)
at
org.apache.ignite.internal.processors.odbc.jdbc.JdbcRequestHandler.executeQuery(JdbcRequestHandler.java:379)
at
org.apache.ignite.internal.processors.odbc.jdbc.JdbcRequestHandler.handle(JdbcRequestHandler.java:178)
at
org.apache.ignite.internal.processors.odbc.ClientListenerNioListener.onMessage(ClientListenerNioListener.java:160)
at
org.apache.ignite.internal.processors.odbc.ClientListenerNioListener.onMessage(ClientListenerNioListener.java:44)
at
org.apache.ignite.internal.util.nio.GridNioFilterChain$TailFilter.onMessageReceived(GridNioFilterChain.java:279)
at
org.apache.ignite.internal.util.nio.GridNioFilterAdapter.proceedMessageReceived(GridNioFilterAdapter.java:109)
at
org.apache.ignite.internal.util.nio.GridNioAsyncNotifyFilter$3.body(GridNioAsyncNotifyFilter.java:97)
at org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:110)
at
org.apache.ignite.internal.util.worker.GridWorkerPool$1.run(GridWorkerPool.java:70)
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
"disco-event-worker-#217" #276 prio=5 os_prio=0 tid=0x0000558b10adc000
nid=0x26e waiting on condition [0x00007f2464b3c000]
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x00000004c00d1350> (a
java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at
java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
at
org.apache.ignite.internal.managers.discovery.GridDiscoveryManager$DiscoveryWorker.body0(GridDiscoveryManager.java:2600)
at
org.apache.ignite.internal.managers.discovery.GridDiscoveryManager$DiscoveryWorker.body(GridDiscoveryManager.java:2582)
at org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:110)
at java.lang.Thread.run(Thread.java:748)
"exchange-worker-#218" #279 prio=5 os_prio=0 tid=0x0000558b10993800 nid=0x271
waiting on condition [0x00007f24624e5000]
java.lang.Thread.State: TIMED_WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x00000004c01782c0> (a
java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215)
at
java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2078)
at
java.util.concurrent.LinkedBlockingDeque.pollFirst(LinkedBlockingDeque.java:522)
at java.util.concurrent.LinkedBlockingDeque.poll(LinkedBlockingDeque.java:684)
at
org.apache.ignite.internal.processors.cache.GridCachePartitionExchangeManager$ExchangeWorker.body(GridCachePartitionExchangeManager.java:2290)
at org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:110)
at java.lang.Thread.run(Thread.java:748)
{code}
was:
Let's consider the following scenario:
* Start a new node (node 'A') and create a new partitioned cache that resides
on that node
{code:java}
Ignite ignite = Ignition.start("examples/config/segmentation/node-A.xml");
IgniteCache<String, String> cache = ignite.getOrCreateCache(new
CacheConfiguration<String, String>()
.setName("default")
.setIndexedTypes(String.class, String.class)
.setNodeFilter(new NodeFilter())
);
public class NodeFilter implements IgnitePredicate<ClusterNode> {
@Override public boolean apply(ClusterNode node) {
return node.attribute("test.attribute").equals("first-node");
}
}{code}
* Start the second node (node 'B') with a custom connector configuration:
{code:java}
<property name="clientConnectorConfiguration">
<bean class="org.apache.ignite.configuration.ClientConnectorConfiguration">
<property name="host" value="127.0.0.1"/>
<property name="port" value="22222"/>
<property name="portRange" value="10"/>
</bean>
</property>
Ignite ignite = Ignition.start("examples/config/segmentation/node-B.xml");
Executors.newScheduledThreadPool(1).schedule(
new Runnable() {
@Override public void run() {
DiscoverySpi spi = ignite.configuration().getDiscoverySpi();
spi.failNode(ignite.cluster().localNode().id(), "test message");
}
},
30,
TimeUnit.SECONDS);{code}
* Execute simple SQL query using sqlline for example (JDBC driver should be
connected to the node 'B')
{code:java}
./sqlline.sh --verbose=true -u jdbc:ignite:thin://127.0.0.1:22222
select * from UNKNOWN_TABLE;{code}
In that case, IgniteH2Indexing.prepareStatement() throws SQLException(Table is
not found) and the implementation tries to start caches that are not started
yet by sending ClientCacheChangeDummyDiscoveryMessage to discovery worker
thread,
which in turn posts that message to exchange-worker thread.
Assume that while processing of ClientCacheChangeDummyDiscoveryMessage by the
exchange-worker, the discovery thread receives EVT_NODE_FAILED (as a result of
segmentation) and so DiscoCache history is updated by removing the failed node
from the list of alive nodes.
At the same time, exchange-worker detects that there is only one alive node
(node 'B' in our case) and mistakenly believes that node 'B' is a coordinator:
and results in the following NullPointerException:
> SQL query execution may lead to NullPointerException during node stop.
> ----------------------------------------------------------------------
>
> Key: IGNITE-8689
> URL: https://issues.apache.org/jira/browse/IGNITE-8689
> Project: Ignite
> Issue Type: Bug
> Components: general
> Affects Versions: 2.4
> Reporter: Vyacheslav Koptilin
> Priority: Major
>
> Let's consider the following scenario:
> * Start a new node (node 'A') and create a new partitioned cache that
> resides on that node
> {code:java}
> Ignite ignite = Ignition.start("examples/config/segmentation/node-A.xml");
> IgniteCache<String, String> cache = ignite.getOrCreateCache(new
> CacheConfiguration<String, String>()
> .setName("default")
> .setIndexedTypes(String.class, String.class)
> .setNodeFilter(new NodeFilter())
> );
> public class NodeFilter implements IgnitePredicate<ClusterNode> {
> @Override public boolean apply(ClusterNode node) {
> return node.attribute("test.attribute").equals("first-node");
> }
> }{code}
> * Start the second node (node 'B') with a custom connector configuration:
> {code:java}
> <property name="clientConnectorConfiguration">
> <bean
> class="org.apache.ignite.configuration.ClientConnectorConfiguration">
> <property name="host" value="127.0.0.1"/>
> <property name="port" value="22222"/>
> <property name="portRange" value="10"/>
> </bean>
> </property>
> Ignite ignite = Ignition.start("examples/config/segmentation/node-B.xml");
> Executors.newScheduledThreadPool(1).schedule(
> new Runnable() {
> @Override public void run() {
> DiscoverySpi spi = ignite.configuration().getDiscoverySpi();
> spi.failNode(ignite.cluster().localNode().id(), "test message");
> }
> },
> 30,
> TimeUnit.SECONDS);{code}
> * Execute simple SQL query using sqlline for example (JDBC driver should be
> connected to the node 'B')
> {code:java}
> ./sqlline.sh --verbose=true -u jdbc:ignite:thin://127.0.0.1:22222
> select * from UNKNOWN_TABLE;{code}
> In that case, {{IgniteH2Indexing.prepareStatement()}} throws
> {{SQLException(Table is not found)}} and the implementation tries to start
> caches that are not started yet by sending
> {{ClientCacheChangeDummyDiscoveryMessage}} to 'discovery-worker' thread,
> which in turn posts that message to 'exchange-worker' thread.
> Assume that while processing of {{ClientCacheChangeDummyDiscoveryMessage}} by
> the 'exchange-worker', the discovery thread receives {{EVT_NODE_FAILED}} (as
> a result of segmentation) and so {{DiscoCache}} history is updated by
> removing the failed node from the list of alive nodes.
> At the same time, 'exchange-worker' detects that there is only one alive node
> (node 'B' in our case) and mistakenly believes that node 'B' is a coordinator:
> {code:java|title=CacheAffinitySharedManager.java}
> void processClientCachesChanges(ClientCacheChangeDummyDiscoveryMessage
> msg) {
> AffinityTopologyVersion topVer =
> cctx.exchange().readyAffinityVersion();
> DiscoCache discoCache = cctx.discovery().discoCache(topVer);
> boolean crd =
> cctx.localNode().equals(discoCache.oldestAliveServerNode()); // discoCache
> contains only the one node!
> Map<Integer, Boolean> startedCaches =
> processClientCacheStartRequests(msg, crd, topVer, discoCache);
> Set<Integer> closedCaches = processCacheCloseRequests(msg, crd,
> topVer);
> if (startedCaches != null || closedCaches != null)
> scheduleClientChangeMessage(startedCaches, closedCaches);
> }
> {code}
> and results in the following {{NullPointerException}}:
> {code:java}
> [19:25:57,019][ERROR][exchange-worker-#42][GridCachePartitionExchangeManager]
> Failed to process custom exchange task:
> ClientCacheChangeDummyDiscoveryMessage
> [reqId=8c7904a2-4b70-4614-bf7b-f4434d274c30, cachesToClose=null,
> startCaches=[default-segmented]]
> java.lang.NullPointerException
> at
> org.apache.ignite.internal.processors.cache.CacheAffinitySharedManager.processClientCacheStartRequests(CacheAffinitySharedManager.java:458)
> at
> org.apache.ignite.internal.processors.cache.CacheAffinitySharedManager.processClientCachesChanges(CacheAffinitySharedManager.java:621)
> at
> org.apache.ignite.internal.processors.cache.GridCacheProcessor.processCustomExchangeTask(GridCacheProcessor.java:363)
> at
> org.apache.ignite.internal.processors.cache.GridCachePartitionExchangeManager$ExchangeWorker.processCustomTask(GridCachePartitionExchangeManager.java:2207)
> at
> org.apache.ignite.internal.processors.cache.GridCachePartitionExchangeManager$ExchangeWorker.body(GridCachePartitionExchangeManager.java:2296)
> at org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:110)
> at java.lang.Thread.run(Thread.java:748)
> {code}
> As a result, the node cannot be stopped due to the following reasons:
> * 'exchange' thread throws {{NullPointerException}} and therefore does not
> complete {{DynamicCacheStartFuture}}
> * 'Client connector' thread is blocked on {{DynamicCacheStatrt.get()}}
> method which never returns control
> * the thread which performs node stopping process is blocked on {{busyLock}}
> Please see the following thread dump:
> {code:java}
> "Thread-117" #734 prio=5 os_prio=0 tid=0x0000558b117a9000 nid=0x437 waiting
> on condition [0x00007f2466ba1000]
> java.lang.Thread.State: TIMED_WAITING (sleeping)
> at java.lang.Thread.sleep(Native Method)
> at
> org.apache.ignite.internal.util.GridSpinReadWriteLock.writeLock(GridSpinReadWriteLock.java:206)
> at
> org.apache.ignite.internal.util.GridSpinBusyLock.block(GridSpinBusyLock.java:76)
> at
> org.apache.ignite.internal.processors.odbc.ClientListenerProcessor.onKernalStop(ClientListenerProcessor.java:224)
> at org.apache.ignite.internal.IgniteKernal.stop0(IgniteKernal.java:2146)
> at org.apache.ignite.internal.IgniteKernal.stop(IgniteKernal.java:2094)
> at
> org.apache.ignite.internal.IgnitionEx$IgniteNamedInstance.stop0(IgnitionEx.java:2545)
> - locked <0x00000004c0326278> (a
> org.apache.ignite.internal.IgnitionEx$IgniteNamedInstance)
> at
> org.apache.ignite.internal.IgnitionEx$IgniteNamedInstance.stop(IgnitionEx.java:2508)
> at org.apache.ignite.internal.IgnitionEx.stop(IgnitionEx.java:365)
> at org.apache.ignite.Ignition.stop(Ignition.java:229)
> at
> org.apache.ignite.internal.managers.discovery.GridDiscoveryManager$10.run(GridDiscoveryManager.java:2385)
> at java.lang.Thread.run(Thread.java:748)
> "client-connector-#186" #240 prio=5 os_prio=0 tid=0x0000558b12afd000
> nid=0x249 waiting on condition [0x00007f246667f000]
> java.lang.Thread.State: WAITING (parking)
> at sun.misc.Unsafe.park(Native Method)
> at java.util.concurrent.locks.LockSupport.park(LockSupport.java:304)
> at
> org.apache.ignite.internal.util.future.GridFutureAdapter.get0(GridFutureAdapter.java:177)
> at
> org.apache.ignite.internal.util.future.GridFutureAdapter.get(GridFutureAdapter.java:140)
> at
> org.apache.ignite.internal.processors.cache.GridCacheProcessor.createMissingQueryCaches(GridCacheProcessor.java:3947)
> at
> org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing.prepareStatementAndCaches(IgniteH2Indexing.java:2015)
> at
> org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing.parseAndSplit(IgniteH2Indexing.java:1794)
> at
> org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing.querySqlFields(IgniteH2Indexing.java:1650)
> at
> org.apache.ignite.internal.processors.query.GridQueryProcessor$4.applyx(GridQueryProcessor.java:2037)
> at
> org.apache.ignite.internal.processors.query.GridQueryProcessor$4.applyx(GridQueryProcessor.java:2032)
> at
> org.apache.ignite.internal.util.lang.IgniteOutClosureX.apply(IgniteOutClosureX.java:36)
> at
> org.apache.ignite.internal.processors.query.GridQueryProcessor.executeQuery(GridQueryProcessor.java:2580)
> at
> org.apache.ignite.internal.processors.query.GridQueryProcessor.querySqlFields(GridQueryProcessor.java:2046)
> at
> org.apache.ignite.internal.processors.odbc.jdbc.JdbcRequestHandler.executeQuery(JdbcRequestHandler.java:379)
> at
> org.apache.ignite.internal.processors.odbc.jdbc.JdbcRequestHandler.handle(JdbcRequestHandler.java:178)
> at
> org.apache.ignite.internal.processors.odbc.ClientListenerNioListener.onMessage(ClientListenerNioListener.java:160)
> at
> org.apache.ignite.internal.processors.odbc.ClientListenerNioListener.onMessage(ClientListenerNioListener.java:44)
> at
> org.apache.ignite.internal.util.nio.GridNioFilterChain$TailFilter.onMessageReceived(GridNioFilterChain.java:279)
> at
> org.apache.ignite.internal.util.nio.GridNioFilterAdapter.proceedMessageReceived(GridNioFilterAdapter.java:109)
> at
> org.apache.ignite.internal.util.nio.GridNioAsyncNotifyFilter$3.body(GridNioAsyncNotifyFilter.java:97)
> at org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:110)
> at
> org.apache.ignite.internal.util.worker.GridWorkerPool$1.run(GridWorkerPool.java:70)
> at
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
> at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
> at java.lang.Thread.run(Thread.java:748)
> "disco-event-worker-#217" #276 prio=5 os_prio=0 tid=0x0000558b10adc000
> nid=0x26e waiting on condition [0x00007f2464b3c000]
> java.lang.Thread.State: WAITING (parking)
> at sun.misc.Unsafe.park(Native Method)
> - parking to wait for <0x00000004c00d1350> (a
> java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
> at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
> at
> java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
> at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
> at
> org.apache.ignite.internal.managers.discovery.GridDiscoveryManager$DiscoveryWorker.body0(GridDiscoveryManager.java:2600)
> at
> org.apache.ignite.internal.managers.discovery.GridDiscoveryManager$DiscoveryWorker.body(GridDiscoveryManager.java:2582)
> at org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:110)
> at java.lang.Thread.run(Thread.java:748)
> "exchange-worker-#218" #279 prio=5 os_prio=0 tid=0x0000558b10993800 nid=0x271
> waiting on condition [0x00007f24624e5000]
> java.lang.Thread.State: TIMED_WAITING (parking)
> at sun.misc.Unsafe.park(Native Method)
> - parking to wait for <0x00000004c01782c0> (a
> java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
> at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215)
> at
> java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2078)
> at
> java.util.concurrent.LinkedBlockingDeque.pollFirst(LinkedBlockingDeque.java:522)
> at java.util.concurrent.LinkedBlockingDeque.poll(LinkedBlockingDeque.java:684)
> at
> org.apache.ignite.internal.processors.cache.GridCachePartitionExchangeManager$ExchangeWorker.body(GridCachePartitionExchangeManager.java:2290)
> at org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:110)
> at java.lang.Thread.run(Thread.java:748)
> {code}
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)