/** * @param evt Event. * @param discoCache Discovery data cache. * @param transitionWaitFut Future if cluster state transition is in progress. * @param active Cluster active status. */ public DiscoveryLocalJoinData(DiscoveryEvent evt, DiscoCache discoCache, @Nullable IgniteInternalFuture<Boolean> transitionWaitFut, boolean active) { assert evt != null && evt.topologyVersion() > 0 : evt; this.evt = evt; this.discoCache = discoCache; this.transitionWaitFut = transitionWaitFut; this.active = active; joinTopVer = new AffinityTopologyVersion(evt.topologyVersion(), 0); }
/** {@inheritDoc} */ @Override public void onEvent(Event evt) { assert evt.type() == EVT_NODE_JOINED || evt.type() == EVT_NODE_LEFT || evt.type() == EVT_NODE_FAILED; DiscoveryEvent discoEvt = (DiscoveryEvent)evt; if (discoEvt.topologyVersion() >= awaitVer) onDone(discoEvt.topologyVersion()); } }
/** * @param evt Discovery event. * @return Affinity topology version. */ private AffinityTopologyVersion affinityTopologyVersion(DiscoveryEvent evt) { if (evt.type() == DiscoveryCustomEvent.EVT_DISCOVERY_CUSTOM_EVT) return ((DiscoveryCustomEvent)evt).affinityTopologyVersion(); return new AffinityTopologyVersion(evt.topologyVersion()); }
@Override public boolean apply(Event evt) { assertEquals("Unexpected event: " + evt, evt.type(), EventType.EVT_NODE_SEGMENTED); DiscoveryEvent evt0 = (DiscoveryEvent)evt; assertEquals(slowClientNode, evt0.eventNode()); assertEquals(5L, evt0.topologyVersion()); evtSegmentedLatch.countDown(); return false; } }, EventType.EVT_NODE_SEGMENTED);
@Override public void onEvent(Event evt) { assert evt.type() == EVT_NODE_FAILED || evt.type() == EVT_NODE_LEFT; DiscoveryEvent discoEvt = (DiscoveryEvent)evt; UUID id = discoEvt.eventNode().id(); // Remap regular mappings. final Buffer buf = bufMappings.remove(id); // Only async notification is possible since // discovery thread may be trapped otherwise. if (buf != null) { waitAffinityAndRun(new Runnable() { @Override public void run() { buf.onNodeLeft(); } }, discoEvt.topologyVersion(), true); } } };
@Override public boolean apply(Event evt) { assertEquals("Unexpected event: " + evt, evt.type(), EventType.EVT_NODE_FAILED); DiscoveryEvent evt0 = (DiscoveryEvent) evt; assertEquals(slowClientNode, evt0.eventNode()); assertEquals(6L, evt0.topologyVersion()); assertEquals(4, evt0.topologyNodes().size()); evtFailedLatch.countDown(); return false; } }, EventType.EVT_NODE_FAILED);
@Override public void onEvent(Event evt) { DiscoveryEvent discoEvt = (DiscoveryEvent)evt; long topVer = discoEvt.topologyVersion(); int topSize = platformCtx.kernalContext().discovery().cacheNodes( cacheName, new AffinityTopologyVersion(topVer)).size(); platformCtx.gateway().dataStreamerTopologyUpdate(val, topVer, topSize); } };
@SuppressWarnings("SynchronizationOnLocalVariableOrMethodParameter") @Override public boolean apply() { Map<T2<Integer, Long>, DiscoveryEvent> nodeEvts = evts.get(nodeId); if (nodeEvts == null) { info.accept("No events for node: " + nodeId); return false; } synchronized (nodeEvts) { for (DiscoveryEvent expEvt : expEvts) { DiscoveryEvent evt0 = nodeEvts.get(new T2<>(clusterNum.get(), expEvt.topologyVersion())); if (evt0 == null) { info.accept("No event for version: " + expEvt.topologyVersion()); return false; } Assert.assertEquals("Unexpected event [topVer=" + expEvt.topologyVersion() +//todo check ", exp=" + U.gridEventName(expEvt.type()) + ", evt=" + evt0 + ']', expEvt.type(), evt0.type()); } } return true; } }, 30000));
/** * @param topVer Event version. * @param evt Event. * @param cache Discovery data cache for given topology version. */ void addEvent(AffinityTopologyVersion topVer, DiscoveryEvent evt, DiscoCache cache) { assert evts.isEmpty() || topVer.compareTo(this.topVer) > 0 : topVer; evts.add(evt); this.topVer = topVer; this.lastEvt = evt; this.discoCache = cache; ClusterNode node = evt.eventNode(); if (!node.isClient()) { lastSrvEvt = evt; srvEvtTopVer = new AffinityTopologyVersion(evt.topologyVersion(), 0); if (evt.type()== EVT_NODE_JOINED) srvJoin = true; else if (evt.type() == EVT_NODE_LEFT || evt.type() == EVT_NODE_FAILED) srvLeft = !node.isClient(); } }
@Override public void onEvent(Event evt) { int evtType = evt.type(); assert evtType == EVT_NODE_FAILED || evtType == EVT_NODE_LEFT; if (affMap.isEmpty()) return; // Skip empty affinity map. final DiscoveryEvent discoEvt = (DiscoveryEvent)evt; // Clean up affinity functions if such cache no more exists. final Collection<String> caches = ctx.cache().cacheNames(); final Collection<AffinityAssignmentKey> rmv = new HashSet<>(); for (AffinityAssignmentKey key : affMap.keySet()) { if (!caches.contains(key.cacheName) || key.topVer.topologyVersion() < discoEvt.topologyVersion() - 10) rmv.add(key); } if (!rmv.isEmpty()) { ctx.timeout().addTimeoutObject( new GridTimeoutObjectAdapter( IgniteUuid.fromUuid(ctx.localNodeId()), AFFINITY_MAP_CLEAN_UP_DELAY) { @Override public void onTimeout() { affMap.keySet().removeAll(rmv); } }); } } };
/** * @return Initial exchange ID. */ private GridDhtPartitionExchangeId initialExchangeId() { DiscoveryEvent discoEvt = cctx.discovery().localJoinEvent(); assert discoEvt != null; final AffinityTopologyVersion startTopVer = affinityTopologyVersion(discoEvt); assert discoEvt.topologyVersion() == startTopVer.topologyVersion(); return exchangeId(cctx.localNode().id(), startTopVer, discoEvt); }
/** * @param de Discovery event. * @param type Event's type. * @param id Event id. * @param name Event name. * @param nid Event node ID. * @param ts Event timestamp. * @param msg Event message. * @param shortDisplay Shortened version of {@code toString()} result. * @return Visor data transfer object for event. */ protected VisorGridEvent discoveryEvent(DiscoveryEvent de, int type, IgniteUuid id, String name, UUID nid, long ts, String msg, String shortDisplay) { ClusterNode node = de.eventNode(); return new VisorGridDiscoveryEvent(type, id, name, nid, ts, msg, shortDisplay, node.id(), F.first(node.addresses()), node.isDaemon(), de.topologyVersion()); }
/** * @param evts1 Received events. * @param evts2 Received events. */ private void checkEventsConsistency(Map<T2<Integer, Long>, DiscoveryEvent> evts1, Map<T2<Integer, Long>, DiscoveryEvent> evts2) { for (Map.Entry<T2<Integer, Long>, DiscoveryEvent> e1 : evts1.entrySet()) { DiscoveryEvent evt1 = e1.getValue(); DiscoveryEvent evt2 = evts2.get(e1.getKey()); if (evt2 != null) { assertEquals(evt1.topologyVersion(), evt2.topologyVersion()); assertEquals(evt1.eventNode().consistentId(), evt2.eventNode().consistentId()); assertTrue(equalsTopologies(evt1.topologyNodes(), evt2.topologyNodes())); } } }
topVer = new AffinityTopologyVersion((evt).topologyVersion(), 0);
else if (msg.exchangeId().topologyVersion().topologyVersion() >= cctx.discovery().localJoinEvent().topologyVersion()) exchangeFuture(msg.exchangeId(), null, null, null, null) .onAffinityChangeMessage(evt.eventNode(), msg);
writer.writeLong(event0.topologyVersion());
/** {@inheritDoc} */ @Override public void onEvent(Event evt) { assert evt.type() == EVT_NODE_JOINED || evt.type() == EVT_NODE_LEFT || evt.type() == EVT_NODE_FAILED; DiscoveryEvent discoEvt = (DiscoveryEvent)evt; if (discoEvt.topologyVersion() >= awaitVer) onDone(discoEvt.topologyVersion()); } }
/** * @param evt Discovery event. * @return Affinity topology version. */ private AffinityTopologyVersion affinityTopologyVersion(DiscoveryEvent evt) { if (evt.type() == DiscoveryCustomEvent.EVT_DISCOVERY_CUSTOM_EVT) return ((DiscoveryCustomEvent)evt).affinityTopologyVersion(); return new AffinityTopologyVersion(evt.topologyVersion()); }
@Override public void onEvent(Event evt) { DiscoveryEvent discoEvt = (DiscoveryEvent)evt; long topVer = discoEvt.topologyVersion(); int topSize = platformCtx.kernalContext().discovery().cacheNodes( cacheName, new AffinityTopologyVersion(topVer)).size(); platformCtx.gateway().dataStreamerTopologyUpdate(val, topVer, topSize); } };
/** * @return Initial exchange ID. */ private GridDhtPartitionExchangeId initialExchangeId() { DiscoveryEvent discoEvt = cctx.discovery().localJoinEvent(); assert discoEvt != null; final AffinityTopologyVersion startTopVer = affinityTopologyVersion(discoEvt); assert discoEvt.topologyVersion() == startTopVer.topologyVersion(); return exchangeId(cctx.localNode().id(), startTopVer, discoEvt); }