public static boolean isViewCreator() { GMSJoinLeave gmsJoinLeave = getGmsJoinLeave(); assertNotNull("There should be a JoinLeave for every DS", gmsJoinLeave); return gmsJoinLeave.getView().getCreator().equals(gmsJoinLeave.getMemberID()); }
/** * check to see if the new view shows a drop of 51% or more */ private boolean isNetworkPartition(NetView newView, boolean logWeights) { if (currentView == null) { return false; } int oldWeight = currentView.memberWeight(); int failedWeight = newView.getCrashedMemberWeight(currentView); if (failedWeight > 0 && logWeights) { if (logger.isInfoEnabled() && newView.getCreator().equals(localAddress)) { // view-creator // logs this newView.logCrashedMemberWeights(currentView, logger); } int failurePoint = (int) (Math.round(51.0 * oldWeight) / 100.0); if (failedWeight > failurePoint && quorumLostView != newView) { quorumLostView = newView; logger.warn("total weight lost in this view change is {} of {}. Quorum has been lost!", failedWeight, oldWeight); services.getManager().quorumLost(newView.getActualCrashedMembers(currentView), currentView); return true; } } return false; }
conflictingView != null && !conflictingView.getCreator().equals(localAddress) && conflictingView.getViewId() > newView.getViewId(); if (conflictingViewNotFromMe) { && conflictingView.getCreator() .getVmKind() == ClusterDistributionManager.LOCATOR_DM_TYPE) { logger.info("View preparation interrupted - a locator is taking over as "
private void ackView(InstallViewMessage m) { if (!playingDead && m.getView().contains(m.getView().getCreator())) { services.getMessenger() .send(new ViewAckMessage(m.getSender(), m.getView().getViewId(), m.isPreparing())); } }
if (!newView.getCreator().equals(this.localAddress)) { NetView check = new NetView(newView, newView.getViewId() + 1); synchronized (leftMembers) {
@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)); }