void sendCurrentView() { NetView v = currentView; if (v != null) { InstallViewMessage msg = new InstallViewMessage(v, services.getAuthenticator().getCredentials(localAddress), false); Collection<InternalDistributedMember> recips = new ArrayList<>(v.size() + v.getCrashedMembers().size()); recips.addAll(v.getMembers()); recips.remove(localAddress); recips.addAll(v.getCrashedMembers()); msg.setRecipients(recips); // use sendUnreliably since we are sending to crashed members & // don't want any retransmission tasks set up for them services.getMessenger().sendUnreliably(msg); } } }
@Override public void installView(NetView v) { this.view = v; if (this.jgAddress.getVmViewId() < 0) { this.jgAddress.setVmViewId(this.localAddress.getVmViewId()); } List<JGAddress> mbrs = new ArrayList<>(v.size()); mbrs.addAll(v.getMembers().stream().map(JGAddress::new).collect(Collectors.toList())); ViewId vid = new ViewId(new JGAddress(v.getCoordinator()), v.getViewId()); View jgv = new View(vid, new ArrayList<>(mbrs)); logger.trace("installing view into JGroups stack: {}", jgv); this.myChannel.down(new Event(Event.VIEW_CHANGE, jgv)); addressesWithIoExceptionsProcessed.clear(); if (encrypt != null) { encrypt.installView(v); } synchronized (scheduledMcastSeqnos) { for (DistributedMember mbr : v.getCrashedMembers()) { scheduledMcastSeqnos.remove(mbr); } for (DistributedMember mbr : v.getShutdownMembers()) { scheduledMcastSeqnos.remove(mbr); } } }
prepareAndSendView(newView, joinReqs, leaveReqs, newView.getCrashedMembers());
private void createAndStartViewCreator(NetView newView) { if (viewCreator == null || viewCreator.isShutdown()) { services.getMessenger().initClusterKey(); viewCreator = new ViewCreator("Geode Membership View Creator"); if (newView != null) { viewCreator.setInitialView(newView, newView.getNewMembers(), newView.getShutdownMembers(), newView.getCrashedMembers()); } logger.info("ViewCreator starting on:" + localAddress); viewCreator.start(); } }
newView.getCrashedMembers().contains(m) || suspectedMembers.containsKey(m), "departed membership view"); } catch (VirtualMachineError err) {
if (!view.getCrashedMembers().isEmpty()) { recips = new HashSet<>(recips); recips.addAll(view.getCrashedMembers()); pendingRemovals.removeAll(view.getCrashedMembers()); viewReplyProcessor.initialize(id, responders); viewReplyProcessor.processPendingRequests(pendingLeaves, pendingRemovals);
new ArrayList<>(currentView.getCrashedMembers().size() + unresponsive.size()); failures.addAll(conflictingView.getCrashedMembers());
@Test public void testCreateView() throws Exception { int numMembers = members.size(); NetView view = new NetView(members.get(0), 2, members); setFailureDetectionPorts(view); assertTrue(view.getCreator().equals(members.get(0))); assertEquals(2, view.getViewId()); assertEquals(members, view.getMembers()); assertEquals(0, view.getCrashedMembers().size()); assertEquals(members.get(1), view.getLeadMember()); // a locator can't be lead member assertEquals(0, view.getShutdownMembers().size()); assertEquals(1, view.getNewMembers().size()); assertEquals(members.get(numMembers - 1), view.getNewMembers().iterator().next()); assertEquals(members.get(0), view.getCoordinator()); for (int i = 0; i < numMembers; i++) { InternalDistributedMember mbr = members.get(i); assertEquals(mbr.getPort(), view.getFailureDetectionPort(mbr)); } assertFalse(view.shouldBeCoordinator(members.get(1))); assertTrue(view.shouldBeCoordinator(members.get(0))); assertEquals(members.get(numMembers - 1), view.getCoordinator(Collections.singletonList(members.get(0)))); members.get(numMembers - 1).getNetMember().setPreferredForCoordinator(false); assertEquals(members.get(1), view.getCoordinator(Collections.singletonList(members.get(0)))); members.get(numMembers - 1).getNetMember().setPreferredForCoordinator(true); List<InternalDistributedMember> preferred = view.getPreferredCoordinators( Collections.<InternalDistributedMember>singleton(members.get(1)), members.get(0), 2); assertEquals(2, preferred.size()); assertEquals(members.get(numMembers - 1), preferred.get(0)); }
@Test public void testCopyView() throws Exception { NetView view = new NetView(members.get(0), 2, new ArrayList<>(members)); setFailureDetectionPorts(view); NetView newView = new NetView(view, 3); assertTrue(newView.getCreator().equals(members.get(0))); assertEquals(3, newView.getViewId()); assertEquals(members, newView.getMembers()); assertEquals(0, newView.getCrashedMembers().size()); assertEquals(members.get(1), newView.getLeadMember()); // a locator can't be lead member assertEquals(0, newView.getShutdownMembers().size()); assertEquals(0, newView.getNewMembers().size()); assertTrue(newView.equals(view)); assertTrue(view.equals(newView)); newView.remove(members.get(1)); assertFalse(newView.equals(view)); }