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();