Add id field
diff --git a/src/main/java/com/google/code/gossip/GossipMember.java b/src/main/java/com/google/code/gossip/GossipMember.java
index 90f4fd2..f34aead 100644
--- a/src/main/java/com/google/code/gossip/GossipMember.java
+++ b/src/main/java/com/google/code/gossip/GossipMember.java
@@ -17,6 +17,8 @@
public static final String JSON_PORT = "port";
/** The JSON key for the heartbeat property. */
public static final String JSON_HEARTBEAT = "heartbeat";
+
+ public static final String JSON_ID = "id";
/** The hostname or IP address of this gossip member. */
protected String _host;
@@ -27,16 +29,19 @@
/** The current heartbeat of this gossip member. */
protected int _heartbeat;
+ protected String _id;
+
/**
* Constructor.
* @param host The hostname or IP address.
* @param port The port number.
* @param heartbeat The current heartbeat.
*/
- public GossipMember(String host, int port, int heartbeat) {
+ public GossipMember(String host, int port, String id, int heartbeat) {
_host = host;
_port = port;
_heartbeat = heartbeat;
+ _id = id;
}
/**
@@ -78,14 +83,20 @@
public void setHeartbeat(int heartbeat) {
this._heartbeat = heartbeat;
}
+
+
+ public String getId() {
+ return _id;
+ }
- /**
- * @see java.lang.Object#toString()
- */
+ public void setId(String _id) {
+ this._id = _id;
+ }
+
public String toString() {
- return "Member [address=" + getAddress() + ", heartbeat=" + _heartbeat + "]";
+ return "Member [address=" + getAddress() + ", id=" + _id + ", heartbeat=" + _heartbeat + "]";
}
-
+
/**
* @see java.lang.Object#hashCode()
*/
@@ -128,6 +139,7 @@
JSONObject jsonObject = new JSONObject();
jsonObject.put(JSON_HOST, _host);
jsonObject.put(JSON_PORT, _port);
+ jsonObject.put(JSON_ID, _id);
jsonObject.put(JSON_HEARTBEAT, _heartbeat);
return jsonObject;
} catch (JSONException e) {
diff --git a/src/main/java/com/google/code/gossip/GossipService.java b/src/main/java/com/google/code/gossip/GossipService.java
index 2604b8e..cd71731 100644
--- a/src/main/java/com/google/code/gossip/GossipService.java
+++ b/src/main/java/com/google/code/gossip/GossipService.java
@@ -25,7 +25,7 @@
* @throws UnknownHostException
*/
public GossipService(StartupSettings startupSettings) throws InterruptedException, UnknownHostException {
- this(InetAddress.getLocalHost().getHostAddress(), startupSettings.getPort(), startupSettings.getLogLevel(), startupSettings.getGossipMembers(), startupSettings.getGossipSettings());
+ this(InetAddress.getLocalHost().getHostAddress(), startupSettings.getPort(), "", startupSettings.getLogLevel(), startupSettings.getGossipMembers(), startupSettings.getGossipSettings());
}
/**
@@ -34,8 +34,8 @@
* @throws InterruptedException
* @throws UnknownHostException
*/
- public GossipService(String ipAddress, int port, int logLevel, ArrayList<GossipMember> gossipMembers, GossipSettings settings) throws InterruptedException, UnknownHostException {
- _gossipManager = new RandomGossipManager(ipAddress, port, settings, gossipMembers);
+ public GossipService(String ipAddress, int port, String id, int logLevel, ArrayList<GossipMember> gossipMembers, GossipSettings settings) throws InterruptedException, UnknownHostException {
+ _gossipManager = new RandomGossipManager(ipAddress, port, id, settings, gossipMembers);
}
public void start() {
diff --git a/src/main/java/com/google/code/gossip/LocalGossipMember.java b/src/main/java/com/google/code/gossip/LocalGossipMember.java
index 429f39e..6920d23 100644
--- a/src/main/java/com/google/code/gossip/LocalGossipMember.java
+++ b/src/main/java/com/google/code/gossip/LocalGossipMember.java
@@ -20,8 +20,8 @@
* @param gossipService The GossipService object.
* @param cleanupTimeout The cleanup timeout for this gossip member.
*/
- public LocalGossipMember(String hostname, int port, int heartbeat, NotificationListener notificationListener, int cleanupTimeout) {
- super(hostname, port, heartbeat);
+ public LocalGossipMember(String hostname, int port, String id, int heartbeat, NotificationListener notificationListener, int cleanupTimeout) {
+ super(hostname, port, id, heartbeat);
this.timeoutTimer = new GossipTimeoutTimer(cleanupTimeout, notificationListener, this);
}
diff --git a/src/main/java/com/google/code/gossip/RemoteGossipMember.java b/src/main/java/com/google/code/gossip/RemoteGossipMember.java
index a133adc..d6403e0 100644
--- a/src/main/java/com/google/code/gossip/RemoteGossipMember.java
+++ b/src/main/java/com/google/code/gossip/RemoteGossipMember.java
@@ -13,8 +13,8 @@
* @param port The port number.
* @param heartbeat The current heartbeat.
*/
- public RemoteGossipMember(String hostname, int port, int heartbeat) {
- super(hostname, port, heartbeat);
+ public RemoteGossipMember(String hostname, int port, String id, int heartbeat) {
+ super(hostname, port, id, heartbeat);
}
/**
@@ -22,7 +22,7 @@
* @param host The hostname or IP address.
* @param port The port number.
*/
- public RemoteGossipMember(String hostname, int port) {
- super(hostname, port, 0);
+ public RemoteGossipMember(String hostname, int port, String id) {
+ super(hostname, port, id, 0);
}
}
diff --git a/src/main/java/com/google/code/gossip/StartupSettings.java b/src/main/java/com/google/code/gossip/StartupSettings.java
index 442034c..8cc1275 100644
--- a/src/main/java/com/google/code/gossip/StartupSettings.java
+++ b/src/main/java/com/google/code/gossip/StartupSettings.java
@@ -147,7 +147,7 @@
JSONArray membersJSON = jsonObject.getJSONArray("members");
for (int i=0; i<membersJSON.length(); i++) {
JSONObject memberJSON = membersJSON.getJSONObject(i);
- RemoteGossipMember member = new RemoteGossipMember(memberJSON.getString("host"), memberJSON.getInt("port"));
+ RemoteGossipMember member = new RemoteGossipMember(memberJSON.getString("host"), memberJSON.getInt("port"), "");
settings.addGossipMember(member);
System.out.print(member.getAddress());
if (i < (membersJSON.length() - 1))
diff --git a/src/main/java/com/google/code/gossip/examples/GossipExample.java b/src/main/java/com/google/code/gossip/examples/GossipExample.java
index 2c6ee29..5b6df28 100644
--- a/src/main/java/com/google/code/gossip/examples/GossipExample.java
+++ b/src/main/java/com/google/code/gossip/examples/GossipExample.java
@@ -51,13 +51,13 @@
// Create the gossip members and put them in a list and give them a port number starting with 2000.
ArrayList<GossipMember> startupMembers = new ArrayList<GossipMember>();
for (int i=0; i<NUMBER_OF_CLIENTS; ++i) {
- startupMembers.add(new RemoteGossipMember(myIpAddress, 2000+i));
+ startupMembers.add(new RemoteGossipMember(myIpAddress, 2000+i, ""));
}
// Lets start the gossip clients.
// Start the clients, waiting cleaning-interval + 1 second between them which will show the dead list handling.
for (GossipMember member : startupMembers) {
- GossipService gossipService = new GossipService(myIpAddress, member.getPort(), LogLevel.DEBUG, startupMembers, settings);
+ GossipService gossipService = new GossipService(myIpAddress, member.getPort(), "", LogLevel.DEBUG, startupMembers, settings);
clients.add(gossipService);
gossipService.start();
sleep(settings.getCleanupInterval() + 1000);
diff --git a/src/main/java/com/google/code/gossip/manager/GossipManager.java b/src/main/java/com/google/code/gossip/manager/GossipManager.java
index ebc185b..d7d9fa4 100644
--- a/src/main/java/com/google/code/gossip/manager/GossipManager.java
+++ b/src/main/java/com/google/code/gossip/manager/GossipManager.java
@@ -41,20 +41,20 @@
private Class<? extends ActiveGossipThread> _activeGossipThreadClass;
- public GossipManager(Class<? extends PassiveGossipThread> passiveGossipThreadClass, Class<? extends ActiveGossipThread> activeGossipThreadClass, String address, int port, GossipSettings settings, ArrayList<GossipMember> gossipMembers) {
+ public GossipManager(Class<? extends PassiveGossipThread> passiveGossipThreadClass,
+ Class<? extends ActiveGossipThread> activeGossipThreadClass, String address, int port,
+ String id, GossipSettings settings, ArrayList<GossipMember> gossipMembers) {
_passiveGossipThreadClass = passiveGossipThreadClass;
_activeGossipThreadClass = activeGossipThreadClass;
_settings = settings;
- _me = new LocalGossipMember(address, port, 0, this, settings.getCleanupInterval());
+ _me = new LocalGossipMember(address, port, id, 0, this, settings.getCleanupInterval());
_memberList = new ArrayList<LocalGossipMember>();
_deadList = new ArrayList<LocalGossipMember>();
- GossipService.LOGGER.debug("Startup member list:");
- GossipService.LOGGER.debug("---------------------");
- GossipService.LOGGER.debug(_me);
-
for (GossipMember startupMember : gossipMembers) {
if (!startupMember.equals(_me)) {
- LocalGossipMember member = new LocalGossipMember(startupMember.getHost(), startupMember.getPort(), 0, this, settings.getCleanupInterval());
+ LocalGossipMember member = new LocalGossipMember(startupMember.getHost(),
+ startupMember.getPort(), startupMember.getId(), 0, this,
+ settings.getCleanupInterval());
_memberList.add(member);
GossipService.LOGGER.debug(member);
}
diff --git a/src/main/java/com/google/code/gossip/manager/PassiveGossipThread.java b/src/main/java/com/google/code/gossip/manager/PassiveGossipThread.java
index 3f51008..61c87bb 100644
--- a/src/main/java/com/google/code/gossip/manager/PassiveGossipThread.java
+++ b/src/main/java/com/google/code/gossip/manager/PassiveGossipThread.java
@@ -86,10 +86,11 @@
JSONArray jsonArray = new JSONArray(receivedMessage);
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject memberJSONObject = jsonArray.getJSONObject(i);
- if (memberJSONObject.length() == 3) {
+ if (memberJSONObject.length() == 4) {
RemoteGossipMember member = new RemoteGossipMember(
memberJSONObject.getString(GossipMember.JSON_HOST),
memberJSONObject.getInt(GossipMember.JSON_PORT),
+ memberJSONObject.getString(GossipMember.JSON_PORT),
memberJSONObject.getInt(GossipMember.JSON_HEARTBEAT));
GossipService.LOGGER.debug(member.toString());
// This is the first member found, so this should be the member who is communicating
@@ -100,7 +101,7 @@
remoteGossipMembers.add(member);
} else {
GossipService.LOGGER
- .error("The received member object does not contain 3 objects:\n"
+ .error("The received member object does not contain 4 objects:\n"
+ memberJSONObject.toString());
}
diff --git a/src/main/java/com/google/code/gossip/manager/impl/OnlyProcessReceivedPassiveGossipThread.java b/src/main/java/com/google/code/gossip/manager/impl/OnlyProcessReceivedPassiveGossipThread.java
index dffe9f8..743f555 100644
--- a/src/main/java/com/google/code/gossip/manager/impl/OnlyProcessReceivedPassiveGossipThread.java
+++ b/src/main/java/com/google/code/gossip/manager/impl/OnlyProcessReceivedPassiveGossipThread.java
@@ -71,14 +71,14 @@
// Remove it from the dead list.
gossipManager.getDeadList().remove(localDeadMember);
// Add it as a new member and add it to the member list.
- LocalGossipMember newLocalMember = new LocalGossipMember(remoteMember.getHost(), remoteMember.getPort(), remoteMember.getHeartbeat(), gossipManager, gossipManager.getSettings().getCleanupInterval());
+ LocalGossipMember newLocalMember = new LocalGossipMember(remoteMember.getHost(), remoteMember.getPort(), remoteMember.getId(), remoteMember.getHeartbeat(), gossipManager, gossipManager.getSettings().getCleanupInterval());
gossipManager.getMemberList().add(newLocalMember);
newLocalMember.startTimeoutTimer();
GossipService.LOGGER.info("Removed remote member " + remoteMember.getAddress() + " from dead list and added to local member list.");
}
} else {
// Brand spanking new member - welcome.
- LocalGossipMember newLocalMember = new LocalGossipMember(remoteMember.getHost(), remoteMember.getPort(), remoteMember.getHeartbeat(), gossipManager, gossipManager.getSettings().getCleanupInterval());
+ LocalGossipMember newLocalMember = new LocalGossipMember(remoteMember.getHost(), remoteMember.getPort(), remoteMember.getId(), remoteMember.getHeartbeat(), gossipManager, gossipManager.getSettings().getCleanupInterval());
gossipManager.getMemberList().add(newLocalMember);
newLocalMember.startTimeoutTimer();
GossipService.LOGGER.info("Added new remote member " + remoteMember.getAddress() + " to local member list.");
diff --git a/src/main/java/com/google/code/gossip/manager/random/RandomGossipManager.java b/src/main/java/com/google/code/gossip/manager/random/RandomGossipManager.java
index 70e18a0..9e2c60f 100644
--- a/src/main/java/com/google/code/gossip/manager/random/RandomGossipManager.java
+++ b/src/main/java/com/google/code/gossip/manager/random/RandomGossipManager.java
@@ -8,7 +8,7 @@
import com.google.code.gossip.manager.impl.OnlyProcessReceivedPassiveGossipThread;
public class RandomGossipManager extends GossipManager {
- public RandomGossipManager(String address, int port, GossipSettings settings, ArrayList<GossipMember> gossipMembers) {
- super(OnlyProcessReceivedPassiveGossipThread.class, RandomActiveGossipThread.class, address, port, settings, gossipMembers);
+ public RandomGossipManager(String address, int port, String id, GossipSettings settings, ArrayList<GossipMember> gossipMembers) {
+ super(OnlyProcessReceivedPassiveGossipThread.class, RandomActiveGossipThread.class, address, port, id, settings, gossipMembers);
}
}
diff --git a/src/test/java/io/teknek/gossip/TenNodeThreeSeedTest.java b/src/test/java/io/teknek/gossip/TenNodeThreeSeedTest.java
index 19519bd..eaf77ef 100644
--- a/src/test/java/io/teknek/gossip/TenNodeThreeSeedTest.java
+++ b/src/test/java/io/teknek/gossip/TenNodeThreeSeedTest.java
@@ -22,12 +22,12 @@
int seedNodes = 3;
ArrayList<GossipMember> startupMembers = new ArrayList<GossipMember>();
for (int i = 1; i < seedNodes+1; ++i) {
- startupMembers.add(new RemoteGossipMember("127.0.0." + i, 2000));
+ startupMembers.add(new RemoteGossipMember("127.0.0." + i, 2000, i+""));
}
ArrayList<GossipService> clients = new ArrayList<GossipService>();
int clusterMembers = 5;
for (int i = 1; i < clusterMembers+1; ++i) {
- GossipService gossipService = new GossipService("127.0.0."+i, 2000, LogLevel.DEBUG, startupMembers, settings);
+ GossipService gossipService = new GossipService("127.0.0."+i, 2000, i+"", LogLevel.DEBUG, startupMembers, settings);
clients.add(gossipService);
gossipService.start();
Thread.sleep(1000);