/** * @param ctx Context. * @param h2 H2 Indexing. * @throws IgniteCheckedException If failed. */ public void start(final GridKernalContext ctx, final IgniteH2Indexing h2) throws IgniteCheckedException { this.ctx = ctx; this.h2 = h2; log = ctx.log(GridReduceQueryExecutor.class); ctx.io() .addMessageListener( GridTopic.TOPIC_QUERY, new GridMessageListener() { @Override public void onMessage(UUID nodeId, Object msg) { if (!busyLock.enterBusy()) return; try { GridReduceQueryExecutor.this.onMessage(nodeId, msg); } finally { busyLock.leaveBusy(); } } }); ctx.event() .addLocalEventListener( new GridLocalEventListener() { @Override public void onEvent(final Event evt) { UUID nodeId = ((DiscoveryEvent) evt).eventNode().id(); for (QueryRun r : runs.values()) { for (GridMergeIndex idx : r.idxs) { if (idx.hasSource(nodeId)) { handleNodeLeft(r, nodeId); break; } } } } }, EventType.EVT_NODE_FAILED, EventType.EVT_NODE_LEFT); }