@Override public boolean isShutdownStarted() { ClusterDistributionManager dm = listener.getDM(); return shutdownInProgress || (dm != null && dm.isShutdownStarted()); }
@Override public void startupMessageFailed(DistributedMember mbr, String failureMessage) { // fix for bug #40666 addShunnedMember((InternalDistributedMember) mbr); // fix for bug #41329, hang waiting for replies try { listener.memberDeparted((InternalDistributedMember) mbr, true, "failed to pass startup checks"); } catch (DistributedSystemDisconnectedException se) { // let's not get huffy about it } }
/** * Process a new view object, or place on the startup queue * * @param suspectInfo the suspectee and suspector */ protected void handleOrDeferSuspect(SuspectMember suspectInfo) { latestViewWriteLock.lock(); try { synchronized (startupLock) { if (!processingEvents) { return; } } InternalDistributedMember suspect = suspectInfo.suspectedMember; InternalDistributedMember who = suspectInfo.whoSuspected; this.suspectedMembers.put(suspect, Long.valueOf(System.currentTimeMillis())); try { listener.memberSuspect(suspect, who, suspectInfo.reason); } catch (DistributedSystemDisconnectedException se) { // let's not get huffy about it } } finally { latestViewWriteLock.unlock(); } }
listener.newMemberConnected(m); } catch (VirtualMachineError err) { SystemFailure.initiateFailure(err); listener.viewInstalled(latestView); } catch (DistributedSystemDisconnectedException se) {
LocalViewMessage v = new LocalViewMessage(address, newId, viewArg, GMSMembershipManager.this); listener.messageReceived(v); } finally { latestViewWriteLock.unlock();
saveCacheXmlForReconnect(); listener.membershipFailure("Channel closed", problem); throw new DistributedSystemDisconnectedException("Channel closed", problem);
this.listener.quorumLost(new HashSet<>(failures), remaining); } catch (CancelException e) {
listener.viewInstalled(latestView);
member); } else { listener.newMemberConnected(member);
listener.messageReceived(msg);
listener.membershipFailure(reason, e); if (membershipTestHooks != null) { List l = membershipTestHooks;
@Override public boolean shutdownInProgress() { // Impossible condition (bug36329): make sure that we check DM's // view of shutdown here ClusterDistributionManager dm = listener.getDM(); return shutdownInProgress || (dm != null && dm.shutdownInProgress()); }
/** * Remove a member. {@link #latestViewLock} must be held before this method is called. If member * is not already shunned, the uplevel event handler is invoked. */ private void removeWithViewLock(InternalDistributedMember dm, boolean crashed, String reason) { boolean wasShunned = isShunned(dm); // Delete resources destroyMember(dm, reason); if (wasShunned) { return; // Explicit deletion, no upcall. } try { listener.memberDeparted(dm, crashed, reason); } catch (DistributedSystemDisconnectedException se) { // let's not get huffy about it } }
/** starts periodic task to perform cleanup chores such as expire surprise members */ private void startCleanupTimer() { if (this.listener == null || listener.getDM() == null) { return; } DistributedSystem ds = this.listener.getDM().getSystem(); this.cleanupTimer = new SystemTimer(ds, true); SystemTimer.SystemTimerTask st = new SystemTimer.SystemTimerTask() { @Override public void run2() { cleanUpSurpriseMembers(); } }; this.cleanupTimer.scheduleAtFixedRate(st, surpriseMemberTimeout, surpriseMemberTimeout / 3); }
/** * wait for serial executor messages from the given member to be processed */ private boolean waitForSerialMessageProcessing(InternalDistributedMember idm) throws InterruptedException { // run a message through the member's serial execution queue to ensure that all of its // current messages have been processed boolean result = false; OverflowQueueWithDMStats<Runnable> serialQueue = listener.getDM().getSerialQueue(idm); if (serialQueue != null) { final boolean done[] = new boolean[1]; final FlushingMessage msg = new FlushingMessage(done); serialQueue.add(new SizeableRunnable(100) { @Override public void run() { msg.invoke(); } public String toString() { return "Processing fake message"; } }); synchronized (done) { while (!done[0]) { done.wait(10); } result = true; } } return result; }