You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@gossip.apache.org by ec...@apache.org on 2016/07/19 13:46:54 UTC

incubator-gossip git commit: periodically attempt to contact dead members

Repository: incubator-gossip
Updated Branches:
  refs/heads/master d2e8c62b2 -> c4cb0d7c6


periodically attempt to contact dead members


Project: http://git-wip-us.apache.org/repos/asf/incubator-gossip/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-gossip/commit/c4cb0d7c
Tree: http://git-wip-us.apache.org/repos/asf/incubator-gossip/tree/c4cb0d7c
Diff: http://git-wip-us.apache.org/repos/asf/incubator-gossip/diff/c4cb0d7c

Branch: refs/heads/master
Commit: c4cb0d7c6c7066b84c161fd4de7a35e029367310
Parents: d2e8c62
Author: Gary Dusbabek <gd...@gmail.com>
Authored: Mon Jul 18 14:09:43 2016 -0500
Committer: Gary Dusbabek <gd...@gmail.com>
Committed: Mon Jul 18 14:09:43 2016 -0500

----------------------------------------------------------------------
 .../apache/gossip/manager/ActiveGossipThread.java    |  6 ++++++
 .../java/org/apache/gossip/manager/GossipCore.java   |  5 +++--
 .../org/apache/gossip/manager/GossipManager.java     | 15 +++++++++++++++
 .../manager/random/RandomActiveGossipThread.java     |  6 +++++-
 4 files changed, 29 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-gossip/blob/c4cb0d7c/src/main/java/org/apache/gossip/manager/ActiveGossipThread.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/gossip/manager/ActiveGossipThread.java b/src/main/java/org/apache/gossip/manager/ActiveGossipThread.java
index 85d73d5..181d9ae 100644
--- a/src/main/java/org/apache/gossip/manager/ActiveGossipThread.java
+++ b/src/main/java/org/apache/gossip/manager/ActiveGossipThread.java
@@ -45,7 +45,13 @@ abstract public class ActiveGossipThread implements Runnable {
     while (keepRunning.get()) {
       try {
         TimeUnit.MILLISECONDS.sleep(gossipManager.getSettings().getGossipInterval());
+        
+        // contact a live member.
         sendMembershipList(gossipManager.getMyself(), gossipManager.getLiveMembers());
+        
+        // contact a dead member.
+        sendMembershipList(gossipManager.getMyself(), gossipManager.getDeadMembers());
+        
       } catch (InterruptedException e) {
         GossipService.LOGGER.error(e);
         keepRunning.set(false);

http://git-wip-us.apache.org/repos/asf/incubator-gossip/blob/c4cb0d7c/src/main/java/org/apache/gossip/manager/GossipCore.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/gossip/manager/GossipCore.java b/src/main/java/org/apache/gossip/manager/GossipCore.java
index 7cfe8a9..ab24621 100644
--- a/src/main/java/org/apache/gossip/manager/GossipCore.java
+++ b/src/main/java/org/apache/gossip/manager/GossipCore.java
@@ -131,7 +131,7 @@ public class GossipCore {
     if (t == null){
       return null;
     }
-    Future<Response> response = service.submit( new Callable<Response>(){
+    final Future<Response> response = service.submit( new Callable<Response>(){
       @Override
       public Response call() throws Exception {
         while(true){
@@ -156,7 +156,8 @@ public class GossipCore {
       LOGGER.error(e.getMessage(), e);
       return null;
     } catch (TimeoutException e) {
-      LOGGER.error(e.getMessage(), e);
+      boolean cancelled = response.cancel(true);
+      LOGGER.error(String.format("Threadpool timeout attempting to contact %s, cancelled ? %b", uri.toString(), cancelled));
       return null; 
     } finally {
       if (t != null){

http://git-wip-us.apache.org/repos/asf/incubator-gossip/blob/c4cb0d7c/src/main/java/org/apache/gossip/manager/GossipManager.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/gossip/manager/GossipManager.java b/src/main/java/org/apache/gossip/manager/GossipManager.java
index 59ad91f..79be431 100644
--- a/src/main/java/org/apache/gossip/manager/GossipManager.java
+++ b/src/main/java/org/apache/gossip/manager/GossipManager.java
@@ -132,6 +132,21 @@ public abstract class GossipManager extends Thread implements NotificationListen
     return settings;
   }
 
+  // TODO: Use some java 8 goodness for these functions.
+  
+  /**
+   * @return a read only list of members found in the DOWN state.
+   */
+  public List<LocalGossipMember> getDeadMembers() {
+    List<LocalGossipMember> down = new ArrayList<>();
+    for (Entry<LocalGossipMember, GossipState> entry : members.entrySet()) {
+      if (GossipState.DOWN.equals(entry.getValue())) {
+        down.add(entry.getKey());
+      }
+    }
+    return Collections.unmodifiableList(down);
+  }
+
   /**
    * 
    * @return a read only list of members found in the UP state

http://git-wip-us.apache.org/repos/asf/incubator-gossip/blob/c4cb0d7c/src/main/java/org/apache/gossip/manager/random/RandomActiveGossipThread.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/gossip/manager/random/RandomActiveGossipThread.java b/src/main/java/org/apache/gossip/manager/random/RandomActiveGossipThread.java
index b39a748..03d550c 100644
--- a/src/main/java/org/apache/gossip/manager/random/RandomActiveGossipThread.java
+++ b/src/main/java/org/apache/gossip/manager/random/RandomActiveGossipThread.java
@@ -71,12 +71,16 @@ public class RandomActiveGossipThread extends ActiveGossipThread {
   }
 
   protected void sendMembershipList(LocalGossipMember me, List<LocalGossipMember> memberList) {
-    GossipService.LOGGER.debug("Send sendMembershipList() is called.");
+    
     me.setHeartbeat(System.currentTimeMillis());
     LocalGossipMember member = selectPartner(memberList);
     if (member == null) {
+      GossipService.LOGGER.debug("Send sendMembershipList() is called without action");
       return;
+    } else {
+      GossipService.LOGGER.debug("Send sendMembershipList() is called to " + member.toString());
     }
+    
     try (DatagramSocket socket = new DatagramSocket()) {
       socket.setSoTimeout(gossipManager.getSettings().getGossipInterval());
       UdpActiveGossipMessage message = new UdpActiveGossipMessage();