public long getViewId() { return view.getViewId(); } @Override
@Override public String toString() { if (this.isShortForm) { return "FindCoordinatorResponse(coordinator="+coordinator+")"; } else { return "FindCoordinatorResponse(coordinator="+coordinator+", fromView="+fromView+", viewId="+(view==null? "nul" : view.getViewId()) +", registrants=" + (registrants == null? 0 : registrants.size()) +", senderId=" + senderId +", network partition detection enabled="+this.networkPartitionDetectionEnabled +", locators preferred as coordinators="+this.usePreferredCoordinators+")"; } }
@Override public void installView(NetView v) { if (latestViewId < 0 && !isConnected()) { if (this.directChannel != null) { this.directChannel.setMembershipSize(v.getMembers().size()); } latestViewId = v.getViewId(); latestView = v; logger.debug("MembershipManager: initial view is {}", latestView); } else { handleOrDeferViewEvent(v); } }
/** * Returns a copy (possibly not current) of the current * view (a list of {@link DistributedMember}s) */ public NetView getView() { // Grab the latest view under a mutex... NetView v; latestViewLock.readLock().lock(); v = latestView; latestViewLock.readLock().unlock(); NetView result = new NetView(v, v.getViewId()); for (InternalDistributedMember m: v.getMembers()) { if (isShunned(m)) { result.remove(m); } } return result; }
long newId = viewArg.getViewId(); LocalViewMessage v = new LocalViewMessage(address, newId, newView, GMSMembershipManager.this);
try { if (latestView.contains(member)) { NetView newView = new NetView(latestView, latestView.getViewId()); newView.remove(member); latestView = newView;
@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<JGAddress>(v.size()); for (InternalDistributedMember idm: v.getMembers()) { mbrs.add(new JGAddress(idm)); } ViewId vid = new ViewId(new JGAddress(v.getCoordinator()), v.getViewId()); View jgv = new View(vid, new ArrayList<Address>(mbrs)); logger.trace("installing JGroups view: {}", jgv); this.myChannel.down(new Event(Event.VIEW_CHANGE, jgv)); addressesWithioExceptionsProcessed.clear(); }
latestView = new NetView(initialView, initialView.getViewId()); listener.viewInstalled(latestView);
boolean sendView(NetView view, List<InternalDistributedMember> newMembers, boolean preparing, ViewReplyProcessor rp) { int id = view.getViewId(); InstallViewMessage msg = new InstallViewMessage(view, services.getAuthenticator().getCredentials(this.localAddress), preparing); Set<InternalDistributedMember> recips = new HashSet<>(view.getMembers());
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())); } }
public static void send(DistributionManager dm) throws InterruptedException { long viewId = dm.getMembershipManager().getView().getViewId(); ReplyProcessor21 rp = new ReplyProcessor21(dm, dm.getOtherDistributionManagerIds()); rp.enableSevereAlertProcessing(); dm.putOutgoing(new WaitForViewInstallation(viewId, rp.getProcessorId())); try { rp.waitForReplies(); } catch (ReplyException e) { if (e.getCause() != null && !(e.getCause() instanceof CancelException)) { if (logger.isDebugEnabled()) { logger.debug("Reply to WaitForViewInstallation received odd exception", e.getCause()); } } } // this isn't necessary for TXFailoverCommand, which is the only use of this // message right now. TXFailoverCommand performs messaging to all servers, // which will force us to wait for the view containing the crash of another // server to be processed. // dm.waitForViewInstallation(viewId); }
synchronized(viewInstallationLock) { int rand = testing? 0 : NetView.RANDOM.nextInt(10); int viewNumber = currentView.getViewId() + 5 + rand; if (this.localAddress.getVmViewId() < 0) { this.localAddress.setVmViewId(viewNumber);
if (cv.getViewId() >= viewId && !cv.contains(incomingRequest.getSender())) { logger.info("Membership ignoring suspect request for " + incomingRequest + " from non-member " + incomingRequest.getSender()); services.getJoinLeave().remove(sender, "this process is initiating suspect processing but is no longer a member"); NetView check = new NetView(cv, cv.getViewId() + 1); ArrayList<SuspectRequest> smbr = new ArrayList<SuspectRequest>(); synchronized (viewVsSuspectedMembers) {
/** * Dispatch routine for processing a single startup event * @param o the startup event to handle */ private void processStartupEvent(StartupEvent o) { // Most common events first if (o.isDistributionMessage()) { // normal message try { dispatchMessage(o.dmsg); } catch (MemberShunnedException e) { // message from non-member - ignore } } else if (o.isGmsView()) { // view event processView(o.gmsView.getViewId(), o.gmsView); } else if (o.isSurpriseConnect()) { // connect processSurpriseConnect(o.member); } else // sanity throw new InternalGemFireError(LocalizedStrings.GroupMembershipService_UNKNOWN_STARTUP_EVENT_0.toLocalizedString(o)); }
NetView check = new NetView(v, v.getViewId() + 1); synchronized (removedMembers) { removedMembers.add(mbr);