DiscoveryEvent evt = new DiscoveryEvent(); evt.node(ctx.discovery().localNode()); evt.eventNode(node); evt.type(type); evt.topologySnapshot(topVer, U.<ClusterNode, ClusterNode>arrayList(topSnapshot, FILTER_NOT_DAEMON)); evt.message("Metrics were updated: " + node); evt.message("Node joined: " + node); evt.message("Node left: " + node); evt.message("Node failed: " + node); evt.message("Node segmented: " + node); evt.message("Client node disconnected: " + node); evt.message("Client node reconnected: " + node);
@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);
/** * @param evt Event. * @return {@code True} if given event is {@link EventType#EVT_NODE_FAILED} or {@link EventType#EVT_NODE_LEFT}. */ public static boolean serverLeftEvent(DiscoveryEvent evt) { return ((evt.type() == EVT_NODE_FAILED || evt.type() == EVT_NODE_LEFT) && !evt.eventNode().isClient()); }
/** * @return Discovery event node. */ public ClusterNode eventNode() { return discoEvt.eventNode(); }
@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 void onEvent(Event evt) { assert evt instanceof DiscoveryEvent; UUID nodeId = ((DiscoveryEvent)evt).eventNode().id(); Collection<ClusterNode> nodes = ((DiscoveryEvent)evt).topologyNodes();
/** * @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(); } }
assert evt.type() == EVT_NODE_FAILED || evt.type() == EVT_NODE_LEFT || evt.type() == EVT_NODE_JOINED; UUID nodeId = evt.eventNode().id(); AffinityTopologyVersion topVer = discoCache.version(); List<ClusterNode> nodes = discoCache.allNodes(); if (evt.type() == EVT_NODE_JOINED) { if (curCrd0.disconnected()) // Handle join event only if coordinator has not been elected yet. onCoordinatorChanged(topVer, nodes, false); }); if (evt.eventNode().isClient()) { RecoveryBallotBox ballotBox = recoveryBallotBoxes .computeIfAbsent(nodeId, uuid -> new RecoveryBallotBox()); .voters(evt.topologyNodes().stream().map(ClusterNode::id).collect(Collectors.toList()));
@Override public void onEvent(Event evt) { assert evt.type() == EVT_NODE_METRICS_UPDATED; DiscoveryEvent discoEvt = (DiscoveryEvent)evt; ClusterNode node = cctx.discovery().node(discoEvt.node().id()); if (node != null && !node.id().equals(cctx.localNodeId())) onReceived(discoEvt.eventNode().id(), node.metrics().getLastDataVersion()); } };
/** * @return Discovery event. * @throws Exception If error occurred. */ private Event createEvent() throws Exception { return new DiscoveryEvent(null, "Test Event", EVT_NODE_METRICS_UPDATED, null); } }
/** * @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()); }
/** * @param topVer Topology version. * @return Expected event instance. */ static DiscoveryEvent joinEvent(long topVer) { DiscoveryEvent expEvt = new DiscoveryEvent(null, null, EventType.EVT_NODE_JOINED, null); expEvt.topologySnapshot(topVer, null); return expEvt; }
/** * Handles discovery event receiving. * * @param evt Discovery event. * @param evtTopVer Topology version. * @param depActions Services deployment actions. */ protected void onEvent(@NotNull DiscoveryEvent evt, @NotNull AffinityTopologyVersion evtTopVer, @Nullable ServiceDeploymentActions depActions) { assert evt.type() == EVT_NODE_JOINED || evt.type() == EVT_NODE_LEFT || evt.type() == EVT_NODE_FAILED || evt.type() == EVT_DISCOVERY_CUSTOM_EVT : "Unexpected event type, evt=" + evt; this.evt = evt; this.evtTopVer = evtTopVer; this.depActions = depActions; }
/** * @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); }
@Override public boolean apply(Event evt) { DiscoveryEvent discoEvt = (DiscoveryEvent) evt; if (discoEvt.topologyNodes().size() != 3) err.compareAndSet(null, new IgniteCheckedException("Invalid discovery event [evt=" + discoEvt + ", nodes=" + discoEvt.topologyNodes() + ']')); return true; } }, EventType.EVT_NODE_JOINED);
/** * @param readyVer Ready topology version. * * @return {@code true} If pending distributed exchange exists because server topology is changed. */ public boolean serverTopologyChanged(AffinityTopologyVersion readyVer) { GridDhtPartitionsExchangeFuture fut = ctx.cache().context().exchange().lastTopologyFuture(); if (fut.isDone()) return false; AffinityTopologyVersion initVer = fut.initialVersion(); return initVer.compareTo(readyVer) > 0 && !fut.firstEvent().node().isClient(); }
@Override public void onEvent(Event evt) { assert evt instanceof DiscoveryEvent; synchronized (qryMux) { uids.remove(((DiscoveryEvent)evt).eventNode().id()); if (uids.isEmpty()) qryMux.notifyAll(); } } };