[ 
https://issues.apache.org/jira/browse/GEODE-8972?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17296386#comment-17296386
 ] 

ASF GitHub Bot commented on GEODE-8972:
---------------------------------------

bschuchardt commented on a change in pull request #6089:
URL: https://github.com/apache/geode/pull/6089#discussion_r588509623



##########
File path: 
geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/GMSMembership.java
##########
@@ -1443,33 +1379,18 @@ private void destroyMember(final ID member, final 
String reason) {
    *
    * @param m the member in question
    *
-   *        This also checks the time the given member was shunned, and has 
the side effect of
-   *        removing the member from the list if it was shunned too far in the 
past.
-   *
    * @return true if the given member is a zombie
    */
   @Override
   public boolean isShunned(ID m) {
-    if (!shunnedMembers.containsKey(m)) {
-      return false;
-    }
-
-    // Make sure that the entry isn't stale...
-    long shunTime = shunnedMembers.get(m).longValue();
-    long now = System.currentTimeMillis();
-    if (shunTime + SHUNNED_SUNSET * 1000L > now) {
-      return true;
-    }
-
-    // Oh, it _is_ stale. Remove it while we're here.
-    endShun(m);
-    return false;
+    final MembershipView<ID> view = latestView;
+    return m.getVmViewId() <= view.getViewId() && !view.contains(m);
   }
 
   private boolean isShunnedOrNew(final ID m) {
     latestViewReadLock.lock();
     try {
-      return shunnedMembers.containsKey(m) || isNew(m);
+      return isShunned(m) || isNew(m);

Review comment:
       I think this could be made more efficient, and that it would be 
worthwhile to do so since this is called unconditionally from 
dispatchMessage().  The method isShunned() will normally return true because 
the sender is usually in the current membership view.  If this is the case we 
don't need to obtain the readlock because the view is now immutable.
   ```
   MembershipView view = latestView;
   if (m.getVmViewId() <=  view.getViewId() && view.contains(m)) {
     return false;
   }
   latestViewReadLock.lock();
   try {
     return isShunned(m) || isNew(m);
   } finally {
   ...
   ```




----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
[email protected]


> remove shunnedMembers collection from GMSMembership
> ---------------------------------------------------
>
>                 Key: GEODE-8972
>                 URL: https://issues.apache.org/jira/browse/GEODE-8972
>             Project: Geode
>          Issue Type: Improvement
>          Components: membership
>            Reporter: Bruce J Schuchardt
>            Assignee: Kamilla Aslami
>            Priority: Major
>              Labels: pull-request-available
>
> GMSMembership has a _shunnedMembers_ collection that is used to track the IDs 
> of nodes that are no longer part of the cluster.  This collection is no 
> longer needed since we can tell if a node is old by comparing the view ID in 
> its identifier to that of the current view (called _latestView_ in that 
> class.  Checks like this are already in place in some parts of the code.
> All uses of _shunnedMembers_ should be replaced with this check.
> MembershipView<ID> view = latestView;
> boolean shunned = memberId.getVmViewId() <= view.getViewId() && 
> !view.contains(memberId);



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to