Repository: incubator-geode Updated Branches: refs/heads/develop f3db3e82c -> 5f8405495
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5f840549/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/mgr/GMSMembershipManager.java ---------------------------------------------------------------------- diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/mgr/GMSMembershipManager.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/mgr/GMSMembershipManager.java index 33c57e0..c1836bd 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/mgr/GMSMembershipManager.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/mgr/GMSMembershipManager.java @@ -29,6 +29,7 @@ import java.util.LinkedHashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; +import java.util.Map.*; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.CountDownLatch; @@ -54,7 +55,6 @@ import com.gemstone.gemfire.distributed.DistributedSystemDisconnectedException; import com.gemstone.gemfire.distributed.Locator; import com.gemstone.gemfire.distributed.internal.AdminMessageType; import com.gemstone.gemfire.distributed.internal.DMStats; -import com.gemstone.gemfire.distributed.internal.DSClock; import com.gemstone.gemfire.distributed.internal.DistributionConfig; import com.gemstone.gemfire.distributed.internal.DistributionException; import com.gemstone.gemfire.distributed.internal.DistributionManager; @@ -103,13 +103,13 @@ public class GMSMembershipManager implements MembershipManager, Manager private static final Logger logger = Services.getLogger(); /** product version to use for multicast serialization */ - volatile boolean disableMulticastForRollingUpgrade; + private volatile boolean disableMulticastForRollingUpgrade; /** * set to true if the distributed system that created this manager was * auto-reconnecting when it was created. */ - boolean wasReconnectingSystem; + private boolean wasReconnectingSystem; /** * A quorum checker is created during reconnect and is held @@ -123,7 +123,7 @@ public class GMSMembershipManager implements MembershipManager, Manager * avoid deadlock when conserve-sockets=true. Use of this should be removed * when connection pools are implemented in the direct-channel */ - private ThreadLocal<Boolean> forceUseUDPMessaging = new ThreadLocal<Boolean>() { + private final ThreadLocal<Boolean> forceUseUDPMessaging = new ThreadLocal<Boolean>() { @Override protected Boolean initialValue() { return Boolean.FALSE; } @@ -154,7 +154,7 @@ public class GMSMembershipManager implements MembershipManager, Manager * @see #VIEW * @see #MESSAGE */ - private int kind; + private final int kind; // Miscellaneous state depending on the kind of event InternalDistributedMember member; @@ -165,21 +165,21 @@ public class GMSMembershipManager implements MembershipManager, Manager @Override public String toString() { - StringBuffer sb = new StringBuffer(); + StringBuilder sb = new StringBuilder(); sb.append("kind="); switch (kind) { case SURPRISE_CONNECT: - sb.append("connect; member = <" + member + ">"); + sb.append("connect; member = <").append(member).append(">"); break; case VIEW: String text = gmsView.toString(); - sb.append("view <" + text + ">"); + sb.append("view <").append(text).append(">"); break; case MESSAGE: - sb.append("message <" + dmsg + ">"); + sb.append("message <").append(dmsg).append(">"); break; default: - sb.append("unknown=<" + kind + ">"); + sb.append("unknown=<").append(kind).append(">"); break; } return sb.toString(); @@ -242,7 +242,7 @@ public class GMSMembershipManager implements MembershipManager, Manager * startup to finish. Updates to {@link #startupMessages} * are synchronized through this object. */ - protected final EventProcessingLock startupLock = new EventProcessingLock(); + private final EventProcessingLock startupLock = new EventProcessingLock(); /** * This is the latest view (ordered list of DistributedMembers) @@ -250,40 +250,40 @@ public class GMSMembershipManager implements MembershipManager, Manager * * All accesses to this object are protected via {@link #latestViewLock} */ - protected NetView latestView = new NetView(); + private NetView latestView = new NetView(); /** * This is the lock for protecting access to latestView * * @see #latestView */ - protected ReadWriteLock latestViewLock = new ReentrantReadWriteLock(); + private final ReadWriteLock latestViewLock = new ReentrantReadWriteLock(); private final Lock latestViewReadLock = latestViewLock.readLock(); private final Lock latestViewWriteLock = latestViewLock.writeLock(); /** * This is the listener that accepts our membership events */ - protected com.gemstone.gemfire.distributed.internal.membership.DistributedMembershipListener listener; + private final com.gemstone.gemfire.distributed.internal.membership.DistributedMembershipListener listener; /** * Membership failure listeners - for testing */ - List membershipTestHooks; + private List membershipTestHooks; /** * This is a representation of the local member (ourself) */ - protected InternalDistributedMember address = null; // new DistributedMember(-1); + private InternalDistributedMember address = null; // new DistributedMember(-1); - protected DirectChannel directChannel; + private DirectChannel directChannel; - protected MyDCReceiver dcReceiver; + private MyDCReceiver dcReceiver; volatile boolean isJoining; /** have we joined successfully? */ - volatile boolean hasJoined; + private volatile boolean hasJoined; /** * Members of the distributed system that we believe have shut down. @@ -298,14 +298,14 @@ public class GMSMembershipManager implements MembershipManager, Manager * @see System#currentTimeMillis() */ // protected final Set shunnedMembers = Collections.synchronizedSet(new HashSet()); - protected final Map shunnedMembers = new ConcurrentHashMap(); + private final Map<DistributedMember, Long> shunnedMembers = new ConcurrentHashMap<>(); /** * Members that have sent a shutdown message. This is used to suppress * suspect processing that otherwise becomes pretty aggressive * when a member is shutting down. */ - private final Map shutdownMembers = new BoundedLinkedHashMap(1000); + private final Map<DistributedMember, Object> shutdownMembers = new BoundedLinkedHashMap<>(); /** * per bug 39552, keep a list of members that have been shunned and for @@ -314,7 +314,7 @@ public class GMSMembershipManager implements MembershipManager, Manager * * Accesses to this list needs to be under the read or write lock of {@link #latestViewLock} */ - protected final HashSet shunnedAndWarnedMembers = new HashSet(); + private final HashSet<DistributedMember> shunnedAndWarnedMembers = new HashSet<>(); /** * The identities and birth-times of others that we have allowed into * membership at the distributed system level, but have not yet appeared @@ -332,26 +332,21 @@ public class GMSMembershipManager implements MembershipManager, Manager * * @see System#currentTimeMillis() */ - protected final Map<InternalDistributedMember, Long> surpriseMembers = new ConcurrentHashMap(); + private final Map<InternalDistributedMember, Long> surpriseMembers = new ConcurrentHashMap<>(); /** * the timeout interval for surprise members. This is calculated from * the member-timeout setting */ - protected int surpriseMemberTimeout; + private int surpriseMemberTimeout; /** * javagroups can skip views and omit telling us about a crashed member. * This map holds a history of suspected members that we use to detect * crashes. */ - private final Map<InternalDistributedMember, Long> suspectedMembers = new ConcurrentHashMap(); - - /** - * the timeout interval for suspected members - */ - private final long suspectMemberTimeout = 180000; - + private final Map<InternalDistributedMember, Long> suspectedMembers = new ConcurrentHashMap<>(); + /** * Length of time, in seconds, that a member is retained in the zombie set * @@ -363,35 +358,32 @@ public class GMSMembershipManager implements MembershipManager, Manager /** * Set to true when the service should stop. */ - protected volatile boolean shutdownInProgress = false; + private volatile boolean shutdownInProgress = false; /** * Set to true when upcalls should be generated for * events. */ - protected volatile boolean processingEvents = false; + private volatile boolean processingEvents = false; /** * This is the latest viewId installed */ - long latestViewId = -1; + private long latestViewId = -1; - /** distribution manager statistics */ - DMStats stats; - /** A list of messages received during channel startup that couldn't be processed yet. Additions or removals of this list must be synchronized via {@link #startupLock}. @since GemFire 5.0 */ - protected LinkedList<StartupEvent> startupMessages = new LinkedList<StartupEvent>(); + private final LinkedList<StartupEvent> startupMessages = new LinkedList<>(); /** * ARB: the map of latches is used to block peer handshakes till * authentication is confirmed. */ - final private HashMap memberLatch = new HashMap(); + final private HashMap<DistributedMember, CountDownLatch> memberLatch = new HashMap<>(); /** * Insert our own MessageReceiver between us and the direct channel, in order @@ -402,7 +394,7 @@ public class GMSMembershipManager implements MembershipManager, Manager class MyDCReceiver implements DirectChannelListener { - DirectChannelListener upCall; + final DirectChannelListener upCall; /** * Don't provide events until the caller has told us we are ready. @@ -430,47 +422,32 @@ public class GMSMembershipManager implements MembershipManager, Manager } - /** if we connect to a locator that has NPD enabled then we enable it in this VM */ - public void enableNetworkPartitionDetection() { - if (logger.isDebugEnabled()) { - logger.debug("Network partition detection is being enabled"); - } - this.services.getConfig().getDistributionConfig().setEnableNetworkPartitionDetection(true); - this.services.getConfig().setNetworkPartitionDetectionEnabled(true); - } - /** * Analyze a given view object, generate events as appropriate - * - * @param newView */ - protected void processView(long newViewId, NetView newView) - { + protected void processView(long newViewId, NetView newView) { // Sanity check... - if (logger.isDebugEnabled()) { - StringBuffer msg = new StringBuffer(200); + if (logger.isDebugEnabled()) { + StringBuilder msg = new StringBuilder(200); msg.append("Membership: Processing view "); msg.append(newView); - msg.append("} on " + address.toString()); + msg.append("} on ").append(address.toString()); + logger.debug(msg); if (!newView.contains(address)) { logger.info(LocalizedMessage.create( - LocalizedStrings.GroupMembershipService_THE_MEMBER_WITH_ID_0_IS_NO_LONGER_IN_MY_OWN_VIEW_1, - new Object[] {address, newView})); + LocalizedStrings.GroupMembershipService_THE_MEMBER_WITH_ID_0_IS_NO_LONGER_IN_MY_OWN_VIEW_1, + new Object[] {address, newView})); } } - -// if (newView.getCrashedMembers().size() > 0) { -// // dump stack for debugging #39827 -// OSProcess.printStacks(0); -// } + // We perform the update under a global lock so that other // incoming events will not be lost in terms of our global view. latestViewWriteLock.lock(); try { // first determine the version for multicast message serialization Version version = Version.CURRENT; - for (Iterator<Map.Entry<InternalDistributedMember, Long>> it=surpriseMembers.entrySet().iterator(); it.hasNext(); ) { - InternalDistributedMember mbr = it.next().getKey(); + for (final Entry<InternalDistributedMember, Long> internalDistributedMemberLongEntry : surpriseMembers.entrySet()) { + InternalDistributedMember mbr = internalDistributedMemberLongEntry.getKey(); Version itsVersion = mbr.getVersionObject(); if (itsVersion != null && version.compareTo(itsVersion) < 0) { version = itsVersion; @@ -499,7 +476,7 @@ public class GMSMembershipManager implements MembershipManager, Manager // look for additions for (int i = 0; i < newView.getMembers().size(); i++) { // additions - InternalDistributedMember m = (InternalDistributedMember)newView.getMembers().get(i); + InternalDistributedMember m = newView.getMembers().get(i); // Once a member has been seen via a view, remove them from the // newborn set @@ -527,7 +504,7 @@ public class GMSMembershipManager implements MembershipManager, Manager if (isSecure) { CountDownLatch currentLatch; - if ((currentLatch = (CountDownLatch)memberLatch.get(m)) != null) { + if ((currentLatch = memberLatch.get(m)) != null) { currentLatch.countDown(); } } @@ -570,7 +547,7 @@ public class GMSMembershipManager implements MembershipManager, Manager // look for departures for (int i = 0; i < priorView.getMembers().size(); i++) { // departures - InternalDistributedMember m = (InternalDistributedMember)priorView.getMembers().get(i); + InternalDistributedMember m = priorView.getMembers().get(i); if (newView.contains(m)) { continue; // still alive } @@ -606,7 +583,7 @@ public class GMSMembershipManager implements MembershipManager, Manager long oldestAllowed = System.currentTimeMillis() - this.surpriseMemberTimeout; for (Iterator<Map.Entry<InternalDistributedMember, Long>> it=surpriseMembers.entrySet().iterator(); it.hasNext(); ) { Map.Entry<InternalDistributedMember, Long> entry = it.next(); - Long birthtime = (Long)entry.getValue(); + Long birthtime = entry.getValue(); if (birthtime.longValue() < oldestAllowed) { it.remove(); InternalDistributedMember m = entry.getKey(); @@ -622,12 +599,15 @@ public class GMSMembershipManager implements MembershipManager, Manager } } // expire suspected members - oldestAllowed = System.currentTimeMillis() - this.suspectMemberTimeout; + /* + the timeout interval for suspected members + */ + final long suspectMemberTimeout = 180000; + oldestAllowed = System.currentTimeMillis() - suspectMemberTimeout; for (Iterator it=suspectedMembers.entrySet().iterator(); it.hasNext(); ) { Map.Entry entry = (Map.Entry)it.next(); Long birthtime = (Long)entry.getValue(); if (birthtime.longValue() < oldestAllowed) { - InternalDistributedMember m = (InternalDistributedMember)entry.getKey(); it.remove(); } } @@ -725,7 +705,6 @@ public class GMSMembershipManager implements MembershipManager, Manager Assert.assertTrue(services != null); - this.stats = services.getStatistics(); DistributionConfig config = services.getConfig().getDistributionConfig(); RemoteTransportConfig transport = services.getConfig().getTransport(); @@ -749,7 +728,6 @@ public class GMSMembershipManager implements MembershipManager, Manager @Override public void start() { DistributionConfig config = services.getConfig().getDistributionConfig(); - RemoteTransportConfig transport = services.getConfig().getTransport(); int dcPort = 0; if (!tcpDisabled) { @@ -779,11 +757,6 @@ public class GMSMembershipManager implements MembershipManager, Manager this.address = services.getMessenger().getMemberID(); - int dcPort = 0; - if (directChannel != null) { - dcPort = directChannel.getPort(); - } - if (directChannel != null) { directChannel.setLocalAddr(address); } @@ -813,7 +786,7 @@ public class GMSMembershipManager implements MembershipManager, Manager } if (notify) { - List<InternalDistributedMember> remaining = new ArrayList<InternalDistributedMember>(view.getMembers()); + List<InternalDistributedMember> remaining = new ArrayList<>(view.getMembers()); remaining.removeAll(failures); if (inhibitForceDisconnectLogging) { @@ -831,7 +804,7 @@ public class GMSMembershipManager implements MembershipManager, Manager try { - this.listener.quorumLost(new HashSet<InternalDistributedMember>(failures), + this.listener.quorumLost(new HashSet<>(failures), remaining); } catch (CancelException e) { // safe to ignore - a forced disconnect probably occurred @@ -855,17 +828,12 @@ public class GMSMembershipManager implements MembershipManager, Manager * 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. - * - * @param dm - * @param crashed - * @param reason */ - protected void removeWithViewLock(InternalDistributedMember dm, - boolean crashed, String reason) { + private void removeWithViewLock(InternalDistributedMember dm, boolean crashed, String reason) { boolean wasShunned = isShunned(dm); // Delete resources - destroyMember(dm, crashed, reason); + destroyMember(dm, reason); if (wasShunned) { return; // Explicit deletion, no upcall. @@ -966,7 +934,7 @@ public class GMSMembershipManager implements MembershipManager, Manager // ignore - happens during shutdown } } - destroyMember(member, false, msg); // for good luck + destroyMember(member, msg); // for good luck return true; // allow during shutdown } @@ -1099,8 +1067,7 @@ public class GMSMembershipManager implements MembershipManager, Manager * We handle this here, and generate an uplevel event if necessary * @param msg the message */ - public void dispatchMessage(DistributionMessage msg) { - boolean isNew = false; + private void dispatchMessage(DistributionMessage msg) { InternalDistributedMember m = msg.getSender(); boolean shunned = false; @@ -1166,9 +1133,8 @@ public class GMSMembershipManager implements MembershipManager, Manager } // view processing can take a while, so we use a separate thread // to avoid blocking a reader thread - NetView newView = viewArg; long newId = viewArg.getViewId(); - LocalViewMessage v = new LocalViewMessage(address, newId, newView, + LocalViewMessage v = new LocalViewMessage(address, newId, viewArg, GMSMembershipManager.this); listener.messageReceived(v); @@ -1216,8 +1182,6 @@ public class GMSMembershipManager implements MembershipManager, Manager * <p> * It is a <em>potential</em> event, because we don't know until we've * grabbed a stable view if this is really a new member. - * - * @param member */ private void processSurpriseConnect( InternalDistributedMember member) @@ -1285,7 +1249,7 @@ public class GMSMembershipManager implements MembershipManager, Manager if (logger.isDebugEnabled()) { logger.debug("Membership: {} remaining startup message(s)", remaining); } - ev = (StartupEvent)startupMessages.removeFirst(); + ev = startupMessages.removeFirst(); } // startupLock try { processStartupEvent(ev); @@ -1372,12 +1336,8 @@ public class GMSMembershipManager implements MembershipManager, Manager latestViewReadLock.unlock(); NetView result = new NetView(v, v.getViewId()); - - for (InternalDistributedMember m: v.getMembers()) { - if (isShunned(m)) { - result.remove(m); - } - } + + v.getMembers().stream().filter(this::isShunned).forEachOrdered(result::remove); return result; } @@ -1398,7 +1358,7 @@ public class GMSMembershipManager implements MembershipManager, Manager } } - protected boolean isJoining() { + private boolean isJoining() { return this.isJoining; } @@ -1419,7 +1379,7 @@ public class GMSMembershipManager implements MembershipManager, Manager latestViewReadLock.lock(); NetView v = latestView; latestViewReadLock.unlock(); - return v.getMembers().contains(m); + return v.contains(m); } /** @@ -1450,7 +1410,7 @@ public class GMSMembershipManager implements MembershipManager, Manager * inhibits logging of ForcedDisconnectException to keep dunit logs clean * while testing this feature */ - protected static volatile boolean inhibitForceDisconnectLogging; + private static volatile boolean inhibitForceDisconnectLogging; /** * Ensure that the critical classes from components @@ -1472,8 +1432,6 @@ public class GMSMembershipManager implements MembershipManager, Manager * @see SystemFailure#emergencyClose() */ public void emergencyClose() { - final boolean DEBUG = SystemFailure.TRACE_CLOSE; - setShutdown(); // We can't call close() because they will allocate objects. Attempt @@ -1484,15 +1442,9 @@ public class GMSMembershipManager implements MembershipManager, Manager // Close the TCPConduit sockets... if (directChannel != null) { - if (DEBUG) { - System.err.println("DEBUG: emergency close of DirectChannel"); - } directChannel.emergencyClose(); } - - if (DEBUG) { - System.err.println("DEBUG: done closing GroupMembershipService"); - } + } @@ -1512,17 +1464,6 @@ public class GMSMembershipManager implements MembershipManager, Manager } } - /** - * returns true if a shutdown message has been received from the given address but - * that member is still in the membership view or is a surprise member. - */ - public boolean isShuttingDown(InternalDistributedMember mbr) { - synchronized(shutdownMembers) { - return shutdownMembers.containsKey(mbr); - } - } - - public void shutdown() { setShutdown(); services.stop(); @@ -1544,7 +1485,7 @@ public class GMSMembershipManager implements MembershipManager, Manager // to be consistent... latestViewWriteLock.lock(); try { - destroyMember(address, false, "orderly shutdown"); + destroyMember(address, "orderly shutdown"); } finally { latestViewWriteLock.unlock(); } @@ -1579,16 +1520,16 @@ public class GMSMembershipManager implements MembershipManager, Manager try { if (membershipTestHooks != null) { List l = membershipTestHooks; - for (Iterator it=l.iterator(); it.hasNext(); ) { - MembershipTestHook dml = (MembershipTestHook)it.next(); + for (final Object aL : l) { + MembershipTestHook dml = (MembershipTestHook) aL; dml.beforeMembershipFailure(reason, e); } } listener.membershipFailure(reason, e); if (membershipTestHooks != null) { List l = membershipTestHooks; - for (Iterator it=l.iterator(); it.hasNext(); ) { - MembershipTestHook dml = (MembershipTestHook)it.next(); + for (final Object aL : l) { + MembershipTestHook dml = (MembershipTestHook) aL; dml.afterMembershipFailure(reason, e); } } @@ -1600,7 +1541,7 @@ public class GMSMembershipManager implements MembershipManager, Manager } /** generate XML for the cache before shutting down due to forced disconnect */ - public void saveCacheXmlForReconnect() { + private void saveCacheXmlForReconnect() { // there are two versions of this method so it can be unit-tested boolean sharedConfigEnabled = services.getConfig().getDistributionConfig().getUseSharedConfiguration(); saveCacheXmlForReconnect(sharedConfigEnabled); @@ -1610,7 +1551,7 @@ public class GMSMembershipManager implements MembershipManager, Manager public void saveCacheXmlForReconnect(boolean sharedConfigEnabled) { // first save the current cache description so reconnect can rebuild the cache GemFireCacheImpl cache = GemFireCacheImpl.getInstance(); - if (cache != null && (cache instanceof Cache)) { + if (cache != null) { if (!Boolean.getBoolean(DistributionConfig.GEMFIRE_PREFIX + "autoReconnect-useCacheXMLFile") && !sharedConfigEnabled) { try { @@ -1625,9 +1566,9 @@ public class GMSMembershipManager implements MembershipManager, Manager } } else if (sharedConfigEnabled && !cache.getCacheServers().isEmpty()) { // we need to retain a cache-server description if this JVM was started by gfsh - List<CacheServerCreation> list = new ArrayList<CacheServerCreation>(cache.getCacheServers().size()); - for (Iterator it = cache.getCacheServers().iterator(); it.hasNext(); ) { - CacheServerImpl cs = (CacheServerImpl)it.next(); + List<CacheServerCreation> list = new ArrayList<>(cache.getCacheServers().size()); + for (final Object o : cache.getCacheServers()) { + CacheServerImpl cs = (CacheServerImpl) o; if (cs.isDefaultServer()) { CacheServerCreation bsc = new CacheServerCreation(cache, cs); list.add(bsc); @@ -1656,7 +1597,7 @@ public class GMSMembershipManager implements MembershipManager, Manager // If ForcedDisconnectException occurred then report it as actual // problem. if (cause instanceof ForcedDisconnectException) { - problem = (Exception) cause; + problem = cause; } else { Throwable ne = problem; while (ne.getCause() != null) { @@ -1680,8 +1621,8 @@ public class GMSMembershipManager implements MembershipManager, Manager } public void suspectMembers(Set members, String reason) { - for (Iterator it=members.iterator(); it.hasNext(); ) { - verifyMember((DistributedMember)it.next(), reason); + for (final Object member : members) { + verifyMember((DistributedMember) member, reason); } } @@ -1700,10 +1641,9 @@ public class GMSMembershipManager implements MembershipManager, Manager * @return true if the member checks out */ public boolean verifyMember(DistributedMember mbr, String reason) { - if (mbr != null && memberExists((InternalDistributedMember)mbr)) { - return this.services.getHealthMonitor().checkIfAvailable(mbr, reason, true); - } - return false; + return mbr != null + && memberExists(mbr) + && this.services.getHealthMonitor().checkIfAvailable(mbr, reason, true); } /** @@ -1730,7 +1670,7 @@ public class GMSMembershipManager implements MembershipManager, Manager try { List<InternalDistributedMember> keySet = latestView.getMembers(); keys = new InternalDistributedMember[keySet.size()]; - keys = (InternalDistributedMember[])keySet.toArray(keys); + keys = keySet.toArray(keys); } finally { latestViewReadLock.unlock(); } @@ -1740,7 +1680,7 @@ public class GMSMembershipManager implements MembershipManager, Manager keys = destinations; } - int sentBytes = 0; + int sentBytes; try { sentBytes = directChannel.send(this, keys, content, this.services.getConfig().getDistributionConfig().getAckWaitThreshold(), @@ -1767,7 +1707,7 @@ public class GMSMembershipManager implements MembershipManager, Manager if (allDestinations) return null; - List members = ex.getMembers(); // We need to return this list of failures + List<InternalDistributedMember> members = (List<InternalDistributedMember>)ex.getMembers(); // We need to return this list of failures // SANITY CHECK: If we fail to send a message to an existing member // of the view, we have a serious error (bug36202). @@ -1788,7 +1728,7 @@ public class GMSMembershipManager implements MembershipManager, Manager new Object[] {content, member, view}), th); // Assert.assertTrue(false, "messaging contract failure"); } - return new HashSet<InternalDistributedMember>(members); + return new HashSet<>(members); } // catch ConnectionExceptions catch (ToDataException | CancelException e) { throw e; @@ -1801,13 +1741,7 @@ public class GMSMembershipManager implements MembershipManager, Manager throw (NotSerializableException)e; } } - catch (RuntimeException e) { - if (logger.isDebugEnabled()) { - logger.debug("Membership: directChannelSend caught exception: {}", e.getMessage(), e); - } - throw e; - } - catch (Error e) { + catch (RuntimeException | Error e) { if (logger.isDebugEnabled()) { logger.debug("Membership: directChannelSend caught exception: {}", e.getMessage(), e); } @@ -1829,11 +1763,7 @@ public class GMSMembershipManager implements MembershipManager, Manager * Otherwise returns false. */ public boolean isReconnectingDS() { - if (this.hasJoined) { - return false; - } else { - return this.wasReconnectingSystem; - } + return !this.hasJoined && this.wasReconnectingSystem; } @Override @@ -1852,26 +1782,19 @@ public class GMSMembershipManager implements MembershipManager, Manager @Override public void releaseQuorumChecker(QuorumChecker checker) { - ((GMSQuorumChecker)checker).suspend(); + checker.suspend(); InternalDistributedSystem system = InternalDistributedSystem.getAnyInstance(); if (system == null || !system.isConnected()) { checker.close(); } } - public Set send(InternalDistributedMember dest, DistributionMessage msg) - throws NotSerializableException { - - InternalDistributedMember dests[] = new InternalDistributedMember[] { dest }; - return send (dests, msg, null); - } - - public Set send(InternalDistributedMember[] destinations, + public Set<InternalDistributedMember> send(InternalDistributedMember[] destinations, DistributionMessage msg, DMStats theStats) throws NotSerializableException { - Set result = null; + Set<InternalDistributedMember> result; boolean allDestinations = msg.forAll(); if (services.getCancelCriterion().isCancelInProgress()) { @@ -1894,9 +1817,8 @@ public class GMSMembershipManager implements MembershipManager, Manager if (allDestinations) return null; else { - result = new HashSet(); - for (int i = 0; i < destinations.length; i ++) - result.add(destinations[i]); + result = new HashSet<>(); + Collections.addAll(result, destinations); return result; } } @@ -1904,7 +1826,7 @@ public class GMSMembershipManager implements MembershipManager, Manager if (msg instanceof AdminMessageType && this.shutdownInProgress) { // no admin messages while shutting down - this can cause threads to hang - return new HashSet(Arrays.asList(msg.getRecipients())); + return new HashSet<>(Arrays.asList(msg.getRecipients())); } // Handle trivial cases @@ -2002,8 +1924,7 @@ public class GMSMembershipManager implements MembershipManager, Manager * * Must be called with the {@link #latestViewLock} held. */ - protected void destroyMember(final InternalDistributedMember member, - boolean crashed, final String reason) { + private void destroyMember(final InternalDistributedMember member, final String reason) { // Make sure it is removed from the view latestViewWriteLock.lock(); @@ -2083,7 +2004,7 @@ public class GMSMembershipManager implements MembershipManager, Manager latestViewWriteLock.lock(); try { // Make sure that the entry isn't stale... - long shunTime = ((Long)shunnedMembers.get(m)).longValue(); + long shunTime = shunnedMembers.get(m).longValue(); long now = System.currentTimeMillis(); if (shunTime + SHUNNED_SUNSET * 1000 > now) { return true; @@ -2097,7 +2018,7 @@ public class GMSMembershipManager implements MembershipManager, Manager } } - private final boolean isShunnedOrNew(final InternalDistributedMember m) { + private boolean isShunnedOrNew(final InternalDistributedMember m) { latestViewReadLock.lock(); try { return shunnedMembers.containsKey(m) || isNew(m); @@ -2107,7 +2028,7 @@ public class GMSMembershipManager implements MembershipManager, Manager } // must be invoked under view read or write lock - private final boolean isNew(final InternalDistributedMember m) { + private boolean isNew(final InternalDistributedMember m) { return !latestView.contains(m) && !surpriseMembers.containsKey(m); } @@ -2128,7 +2049,7 @@ public class GMSMembershipManager implements MembershipManager, Manager latestViewReadLock.lock(); try { if (surpriseMembers.containsKey(m)) { - long birthTime = ((Long)surpriseMembers.get(m)).longValue(); + long birthTime = surpriseMembers.get(m).longValue(); long now = System.currentTimeMillis(); return (birthTime >= (now - this.surpriseMemberTimeout)); } @@ -2178,7 +2099,7 @@ public class GMSMembershipManager implements MembershipManager, Manager * * @param m the member to add */ - protected void addShunnedMember(InternalDistributedMember m) { + private void addShunnedMember(InternalDistributedMember m) { long deathTime = System.currentTimeMillis() - SHUNNED_SUNSET * 1000; surpriseMembers.remove(m); // for safety @@ -2192,43 +2113,41 @@ public class GMSMembershipManager implements MembershipManager, Manager // First, make a copy of the old set. New arrivals _a priori_ don't matter, // and we're going to be updating the list so we don't want to disturb // the iterator. - Set oldMembers = new HashSet(shunnedMembers.entrySet()); - - Set removedMembers = new HashSet(); + Set<Map.Entry<DistributedMember, Long>> oldMembers = new HashSet<>(shunnedMembers.entrySet()); - Iterator it = oldMembers.iterator(); - while (it.hasNext()) { - Map.Entry e = (Map.Entry)it.next(); - - // Key is the member. Value is the time to remove it. - long ll = ((Long)e.getValue()).longValue(); - if (ll >= deathTime) { - continue; // too new. - } - - InternalDistributedMember mm = (InternalDistributedMember)e.getKey(); + Set<DistributedMember> removedMembers = new HashSet<>(); + + for (final Object oldMember : oldMembers) { + Entry e = (Entry) oldMember; + + // Key is the member. Value is the time to remove it. + long ll = ((Long) e.getValue()).longValue(); + if (ll >= deathTime) { + continue; // too new. + } + + InternalDistributedMember mm = (InternalDistributedMember) e.getKey(); + + if (latestView.contains(mm)) { + // Fault tolerance: a shunned member can conceivably linger but never + // disconnect. + // + // We may not delete it at the time that we shun it because the view + // isn't necessarily stable. (Note that a well-behaved cache member + // will depart on its own accord, but we force the issue here.) + destroyMember(mm, "shunned but never disconnected"); + } + if (logger.isDebugEnabled()) { + logger.debug("Membership: finally removed shunned member entry <{}>", mm); + } - if (latestView.contains(mm)) { - // Fault tolerance: a shunned member can conceivably linger but never - // disconnect. - // - // We may not delete it at the time that we shun it because the view - // isn't necessarily stable. (Note that a well-behaved cache member - // will depart on its own accord, but we force the issue here.) - destroyMember(mm, true, "shunned but never disconnected"); - } - if (logger.isDebugEnabled()) { - logger.debug("Membership: finally removed shunned member entry <{}>", mm); - } - - removedMembers.add(mm); - } + removedMembers.add(mm); + } // removed timed-out entries from the shunned-members collections if (removedMembers.size() > 0) { - it = removedMembers.iterator(); - while (it.hasNext()) { - InternalDistributedMember idm = (InternalDistributedMember)it.next(); + for (final Object removedMember : removedMembers) { + InternalDistributedMember idm = (InternalDistributedMember) removedMember; endShun(idm); } } @@ -2236,14 +2155,6 @@ public class GMSMembershipManager implements MembershipManager, Manager /** - * Retrieve thread-local data for transport to another thread in hydra - */ - public Object getThreadLocalData() { - Map result = new HashMap(); - return result; - } - - /** * for testing verification purposes, this return the port for the * direct channel, or zero if there is no direct * channel @@ -2336,7 +2247,7 @@ public class GMSMembershipManager implements MembershipManager, Manager } }); synchronized(done) { - while (done[0] == false) { + while (!done[0]) { done.wait(10); } result = true; @@ -2378,7 +2289,7 @@ public class GMSMembershipManager implements MembershipManager, Manager // If not, then create a latch if needed and wait for the latch to open. foundRemoteId = true; } - else if ((currentLatch = (CountDownLatch)this.memberLatch.get(remoteId)) == null) { + else if ((currentLatch = this.memberLatch.get(remoteId)) == null) { currentLatch = new CountDownLatch(1); this.memberLatch.put(remoteId, currentLatch); } @@ -2470,8 +2381,8 @@ public class GMSMembershipManager implements MembershipManager, Manager } } - boolean beingSick; - boolean playingDead; + private boolean beingSick; + private boolean playingDead; /** * Test hook - be a sick member @@ -2530,15 +2441,14 @@ public class GMSMembershipManager implements MembershipManager, Manager /** * Test hook - inhibit ForcedDisconnectException logging to keep dunit logs clean - * @param b */ public static void inhibitForcedDisconnectLogging(boolean b) { - inhibitForceDisconnectLogging = true; + inhibitForceDisconnectLogging = b; } /** this is a fake message class that is used to flush the serial execution queue */ static class FlushingMessage extends DistributionMessage { - boolean[] done; + final boolean[] done; FlushingMessage(boolean[] done) { this.done = done; } @@ -2559,21 +2469,6 @@ public class GMSMembershipManager implements MembershipManager, Manager } } - /** - * Sets cache time offset in {@link DistributionManager}. - * - * @param coord - * @param timeOffset - * @see InternalDistributedSystem#getClock() - * @see DSClock#setCacheTimeOffset(DistributedMember, long, boolean) - */ - public void setCacheTimeOffset(InternalDistributedMember coord, long timeOffset, boolean isJoin) { - if (this.listener != null) { - DistributionManager dm = this.listener.getDM(); - dm.getSystem().getClock().setCacheTimeOffset(coord, timeOffset, isJoin); - } - } - @Override public void stopped() { } @@ -2623,19 +2518,17 @@ public class GMSMembershipManager implements MembershipManager, Manager } - Thread reconnectThread = new Thread (new Runnable() { - public void run() { - // stop server locators immediately since they may not have correct - // information. This has caused client failures in bridge/wan - // network-down testing - InternalLocator loc = (InternalLocator)Locator.getLocator(); - if (loc != null) { - loc.stop(true, !services.getConfig().getDistributionConfig() - .getDisableAutoReconnect(), false); - } - - uncleanShutdown(reason, shutdownCause); + Thread reconnectThread = new Thread (() -> { + // stop server locators immediately since they may not have correct + // information. This has caused client failures in bridge/wan + // network-down testing + InternalLocator loc = (InternalLocator)Locator.getLocator(); + if (loc != null) { + loc.stop(true, !services.getConfig().getDistributionConfig() + .getDisableAutoReconnect(), false); } + + uncleanShutdown(reason, shutdownCause); }); reconnectThread.setName("DisconnectThread"); @@ -2655,29 +2548,21 @@ public class GMSMembershipManager implements MembershipManager, Manager * number of entries the <code>BoundedLinkedHashMap</code> * can contain. */ - static class BoundedLinkedHashMap extends LinkedHashMap + static class BoundedLinkedHashMap<K,V> extends LinkedHashMap { private static final long serialVersionUID = -3419897166186852692L; /** - * The maximum number of entries allowed in this - * <code>BoundedLinkedHashMap</code> - */ - protected int _maximumNumberOfEntries; - - /** * Constructor. * - * @param maximumNumberOfEntries The maximum number of allowed entries */ - public BoundedLinkedHashMap(int maximumNumberOfEntries) { + public BoundedLinkedHashMap() { super(); - this._maximumNumberOfEntries = maximumNumberOfEntries; } @Override - protected boolean removeEldestEntry(Map.Entry entry) { - return size() > this._maximumNumberOfEntries; + protected boolean removeEldestEntry(Map.Entry eldest) { + return size() > 1000; } } http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5f840549/geode-core/src/test/java/com/gemstone/gemfire/distributed/internal/membership/gms/membership/GMSJoinLeaveJUnitTest.java ---------------------------------------------------------------------- diff --git a/geode-core/src/test/java/com/gemstone/gemfire/distributed/internal/membership/gms/membership/GMSJoinLeaveJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/distributed/internal/membership/gms/membership/GMSJoinLeaveJUnitTest.java index 6f4cfcf..ec639aa 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/distributed/internal/membership/gms/membership/GMSJoinLeaveJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/distributed/internal/membership/gms/membership/GMSJoinLeaveJUnitTest.java @@ -888,7 +888,7 @@ public class GMSJoinLeaveJUnitTest { prepareProcessor.initialize( 1, recips); assertTrue("Prepare processor should be waiting ", gmsJoinLeave.testPrepareProcessorWaiting()); - prepareProcessor.memberSuspected(gmsJoinLeaveMemberId, mockMembers[0]); + prepareProcessor.memberSuspected(mockMembers[0]); prepareProcessor.processLeaveRequest(mockMembers[1]); prepareProcessor.processRemoveRequest(mockMembers[2]); prepareProcessor.processViewResponse(1, mockMembers[3], null); http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5f840549/geode-core/src/test/resources/com/gemstone/gemfire/codeAnalysis/sanctionedDataSerializables.txt ---------------------------------------------------------------------- diff --git a/geode-core/src/test/resources/com/gemstone/gemfire/codeAnalysis/sanctionedDataSerializables.txt b/geode-core/src/test/resources/com/gemstone/gemfire/codeAnalysis/sanctionedDataSerializables.txt index 7eee1aa..5172709 100644 --- a/geode-core/src/test/resources/com/gemstone/gemfire/codeAnalysis/sanctionedDataSerializables.txt +++ b/geode-core/src/test/resources/com/gemstone/gemfire/codeAnalysis/sanctionedDataSerializables.txt @@ -293,8 +293,8 @@ toDataPre_GFE_7_1_0_0,226,2ab400139e000704a7000403b800432ab6004f2bb800972b2ab600 toDataPre_GFE_9_0_0_0,240,2ab400139e000704a7000403b800432ab6004f2bb800972b2ab6004eb9009802002ab400062bb8007c033d2ab40029b9007d01009900071c04803d2ab40029b9006c01009900071c05803d2ab4003a9900071c07803d1c1008803d2b1c1100ff7e91b9009902002b2ab40011b9009802002b2ab40002b9009802002b2ab40013b9009902002ab400202bb8007f2ab400182bb8007c2ab40013100da0000e2ab400192bb8007ca7000e2ab40014b8009a2bb8007c2ab4001ec700081247a7000a2ab4001eb600802bb8007c2ab4001ec7000911012ca7000a2ab4001eb60081b800822bb800832b2ab4001b04b80084b1 com/gemstone/gemfire/distributed/internal/membership/NetView,2 -fromData,69,2a2bb80059c00023b5000e2a2bb9005a0100b500032a2bb8005bb500062abb0007592ab40006b70008b500092a2bb8005cb5000b2a2bb8005cb5000d2a2bb8005db50002b1 -toData,52,2ab4000e2bb800542b2ab40003b9005502002a2ab400062bb700562ab4000b2bb800572ab4000d2bb800572ab400022bb80058b1 +fromData,90,2a2bb80065c00023b5000e2a2bb900660100b500032a2bb80067b50006b200389a00122ab40006c7000bbb003959b7003abf2abb0007592ab40006b70008b500092a2bb80068b5000b2a2bb80068b5000d2a2bb80069b50002b1 +toData,52,2ab4000e2bb800602b2ab40003b9006102002a2ab400062bb700622ab4000b2bb800632ab4000d2bb800632ab400022bb80064b1 com/gemstone/gemfire/distributed/internal/membership/gms/GMSMember,2 fromData,150,2a2bb80046b5001a2bb9004701003d2a1c047e99000704a7000403b500182a1c057e99000704a7000403b500192a2bb80048b500152a2bb900490100b500022a2bb900490100b500032a2bb900490100b500052a2bb9004a0100b5003b2a2bb9004a0100b500072a2bb900490100b500062a2bb8004bb500082a2bb8004cb500092a2bb9004d0100b5001b2a2bb9004d0100b5001cb1 http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5f840549/geode-core/src/test/resources/com/gemstone/gemfire/codeAnalysis/sanctionedSerializables.txt ---------------------------------------------------------------------- diff --git a/geode-core/src/test/resources/com/gemstone/gemfire/codeAnalysis/sanctionedSerializables.txt b/geode-core/src/test/resources/com/gemstone/gemfire/codeAnalysis/sanctionedSerializables.txt old mode 100755 new mode 100644 index e510577..03288c2 --- a/geode-core/src/test/resources/com/gemstone/gemfire/codeAnalysis/sanctionedSerializables.txt +++ b/geode-core/src/test/resources/com/gemstone/gemfire/codeAnalysis/sanctionedSerializables.txt @@ -238,7 +238,7 @@ com/gemstone/gemfire/distributed/internal/locks/DistributedMemberLock$LockReentr com/gemstone/gemfire/distributed/internal/locks/LockGrantorDestroyedException,true,-3540124531032570817 com/gemstone/gemfire/distributed/internal/membership/gms/messages/InstallViewMessage$messageType,false com/gemstone/gemfire/distributed/internal/membership/gms/messenger/JGAddress,true,-1818672332115113291,ip_addr:java/net/InetAddress,port:int,vmViewId:int -com/gemstone/gemfire/distributed/internal/membership/gms/mgr/GMSMembershipManager$BoundedLinkedHashMap,true,-3419897166186852692,_maximumNumberOfEntries:int +com/gemstone/gemfire/distributed/internal/membership/gms/mgr/GMSMembershipManager$BoundedLinkedHashMap,true,-3419897166186852692 com/gemstone/gemfire/internal/AbstractConfig$SortedProperties,true,7156507110684631135 com/gemstone/gemfire/internal/ConfigSource,true,-4097017272431018553,description:java/lang/String,type:com/gemstone/gemfire/internal/ConfigSource$Type com/gemstone/gemfire/internal/ConfigSource$Type,false