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/06/11 00:16:47 UTC

[10/12] incubator-gossip git commit: renamed packages from 'google' to 'apache' and updated necessary imports

renamed packages from 'google' to 'apache' and updated necessary imports


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

Branch: refs/heads/master
Commit: 968203e8a025bc8564127e8188eeacfc4d8332c0
Parents: 6a35db7
Author: Dorian Ellerbe <do...@localhost-fedora23.fios-router.home>
Authored: Sun May 29 00:50:32 2016 -0400
Committer: Edward Capriolo <ed...@gmail.com>
Committed: Tue Jun 7 22:52:54 2016 -0400

----------------------------------------------------------------------
 .../com/google/code/gossip/GossipMember.java    | 168 --------------
 .../com/google/code/gossip/GossipRunner.java    |  60 -----
 .../com/google/code/gossip/GossipService.java   |  87 --------
 .../com/google/code/gossip/GossipSettings.java  |  90 --------
 .../google/code/gossip/GossipTimeoutTimer.java  |  78 -------
 .../google/code/gossip/LocalGossipMember.java   |  70 ------
 .../google/code/gossip/RemoteGossipMember.java  |  53 -----
 .../com/google/code/gossip/StartupSettings.java | 212 ------------------
 .../code/gossip/event/GossipListener.java       |  24 --
 .../google/code/gossip/event/GossipState.java   |  28 ---
 .../code/gossip/examples/GossipExample.java     |  99 ---------
 .../code/gossip/manager/ActiveGossipThread.java |  76 -------
 .../code/gossip/manager/GossipManager.java      | 217 -------------------
 .../gossip/manager/PassiveGossipThread.java     | 169 ---------------
 .../OnlyProcessReceivedPassiveGossipThread.java | 128 -----------
 .../impl/SendMembersActiveGossipThread.java     | 100 ---------
 .../random/RandomActiveGossipThread.java        |  55 -----
 .../manager/random/RandomGossipManager.java     |  34 ---
 .../code/gossip/model/ActiveGossipMessage.java  |  22 --
 .../google/code/gossip/model/GossipMember.java  |  63 ------
 .../java/org/apache/gossip/GossipMember.java    | 168 ++++++++++++++
 .../java/org/apache/gossip/GossipRunner.java    |  60 +++++
 .../java/org/apache/gossip/GossipService.java   |  86 ++++++++
 .../java/org/apache/gossip/GossipSettings.java  |  90 ++++++++
 .../org/apache/gossip/GossipTimeoutTimer.java   |  78 +++++++
 .../org/apache/gossip/LocalGossipMember.java    |  70 ++++++
 .../org/apache/gossip/RemoteGossipMember.java   |  53 +++++
 .../java/org/apache/gossip/StartupSettings.java | 212 ++++++++++++++++++
 .../org/apache/gossip/event/GossipListener.java |  24 ++
 .../org/apache/gossip/event/GossipState.java    |  28 +++
 .../apache/gossip/examples/GossipExample.java   |  99 +++++++++
 .../gossip/manager/ActiveGossipThread.java      |  76 +++++++
 .../apache/gossip/manager/GossipManager.java    | 217 +++++++++++++++++++
 .../gossip/manager/PassiveGossipThread.java     | 169 +++++++++++++++
 .../OnlyProcessReceivedPassiveGossipThread.java | 128 +++++++++++
 .../impl/SendMembersActiveGossipThread.java     |  99 +++++++++
 .../random/RandomActiveGossipThread.java        |  55 +++++
 .../manager/random/RandomGossipManager.java     |  34 +++
 .../gossip/model/ActiveGossipMessage.java       |  22 ++
 .../org/apache/gossip/model/GossipMember.java   |  63 ++++++
 .../io/teknek/gossip/ShutdownDeadtimeTest.java  |  12 +-
 .../io/teknek/gossip/StartupSettingsTest.java   |   8 +-
 .../io/teknek/gossip/TenNodeThreeSeedTest.java  |  12 +-
 43 files changed, 1847 insertions(+), 1849 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-gossip/blob/968203e8/src/main/java/com/google/code/gossip/GossipMember.java
----------------------------------------------------------------------
diff --git a/src/main/java/com/google/code/gossip/GossipMember.java b/src/main/java/com/google/code/gossip/GossipMember.java
deleted file mode 100644
index 56029fa..0000000
--- a/src/main/java/com/google/code/gossip/GossipMember.java
+++ /dev/null
@@ -1,168 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.google.code.gossip;
-
-import java.net.InetSocketAddress;
-
-/**
- * A abstract class representing a gossip member.
- * 
- * @author joshclemm, harmenw
- */
-public abstract class GossipMember implements Comparable<GossipMember> {
-
-  
-  protected final String host;
-
-  protected final int port;
-
-  protected volatile long heartbeat;
-
-  protected final String clusterName;
-
-  /**
-   * The purpose of the id field is to be able for nodes to identify themselves beyond there
-   * host/port. For example an application might generate a persistent id so if they rejoin the
-   * cluster at a different host and port we are aware it is the same node.
-   */
-  protected String id;
-
-  /**
-   * Constructor.
-   * 
-   * @param host
-   *          The hostname or IP address.
-   * @param port
-   *          The port number.
-   * @param heartbeat
-   *          The current heartbeat.
-   * @param id
-   *          an id that may be replaced after contact
-   */
-  public GossipMember(String clusterName, String host, int port, String id, long heartbeat) {
-    this.clusterName = clusterName;
-    this.host = host;
-    this.port = port;
-    this.id = id;
-    this.heartbeat = heartbeat;
-  }
-
-  /**
-   * Get the name of the cluster the member belongs to.
-   * 
-   * @return The cluster name
-   */
-  public String getClusterName() {
-    return clusterName;
-  }
-
-  /**
-   * Get the hostname or IP address of the remote gossip member.
-   * 
-   * @return The hostname or IP address.
-   */
-  public String getHost() {
-    return host;
-  }
-
-  /**
-   * Get the port number of the remote gossip member.
-   * 
-   * @return The port number.
-   */
-  public int getPort() {
-    return port;
-  }
-
-  /**
-   * The member address in the form IP/host:port Similar to the toString in
-   * {@link InetSocketAddress}
-   */
-  public String getAddress() {
-    return host + ":" + port;
-  }
-
-  /**
-   * Get the heartbeat of this gossip member.
-   * 
-   * @return The current heartbeat.
-   */
-  public long getHeartbeat() {
-    return heartbeat;
-  }
-
-  /**
-   * Set the heartbeat of this gossip member.
-   * 
-   * @param heartbeat
-   *          The new heartbeat.
-   */
-  public void setHeartbeat(long heartbeat) {
-    this.heartbeat = heartbeat;
-  }
-
-  public String getId() {
-    return id;
-  }
-
-  public void setId(String _id) {
-    this.id = _id;
-  }
-
-  public String toString() {
-    return "Member [address=" + getAddress() + ", id=" + id + ", heartbeat=" + heartbeat + "]";
-  }
-
-  /**
-   * @see java.lang.Object#hashCode()
-   */
-  @Override
-  public int hashCode() {
-    final int prime = 31;
-    int result = 1;
-    String address = getAddress();
-    result = prime * result + ((address == null) ? 0 : address.hashCode()) + clusterName == null ? 0
-            : clusterName.hashCode();
-    return result;
-  }
-
-  /**
-   * @see java.lang.Object#equals(java.lang.Object)
-   */
-  @Override
-  public boolean equals(Object obj) {
-    if (this == obj) {
-      return true;
-    }
-    if (obj == null) {
-      System.err.println("equals(): obj is null.");
-      return false;
-    }
-    if (!(obj instanceof GossipMember)) {
-      System.err.println("equals(): obj is not of type GossipMember.");
-      return false;
-    }
-    // The object is the same of they both have the same address (hostname and port).
-    return getAddress().equals(((LocalGossipMember) obj).getAddress())
-            && getClusterName().equals(((LocalGossipMember) obj).getClusterName());
-  }
-
-  public int compareTo(GossipMember other) {
-    return this.getAddress().compareTo(other.getAddress());
-  }
-}

http://git-wip-us.apache.org/repos/asf/incubator-gossip/blob/968203e8/src/main/java/com/google/code/gossip/GossipRunner.java
----------------------------------------------------------------------
diff --git a/src/main/java/com/google/code/gossip/GossipRunner.java b/src/main/java/com/google/code/gossip/GossipRunner.java
deleted file mode 100644
index 7530fd9..0000000
--- a/src/main/java/com/google/code/gossip/GossipRunner.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.google.code.gossip;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-
-import org.json.JSONException;
-
-public class GossipRunner {
-
-  public static void main(String[] args) {
-    File configFile;
-    if (args.length == 1) {
-      configFile = new File("./" + args[0]);
-    } else {
-      configFile = new File("gossip.conf");
-    }
-    new GossipRunner(configFile);
-  }
-
-  public GossipRunner(File configFile) {
-    if (configFile != null && configFile.exists()) {
-      try {
-        System.out.println("Parsing the configuration file...");
-        StartupSettings _settings = StartupSettings.fromJSONFile(configFile);
-        GossipService gossipService = new GossipService(_settings);
-        System.out.println("Gossip service successfully initialized, let's start it...");
-        gossipService.start();
-      } catch (FileNotFoundException e) {
-        System.err.println("The given file is not found!");
-      } catch (JSONException e) {
-        System.err.println("The given file is not in the correct JSON format!");
-      } catch (IOException e) {
-        System.err.println("Could not read the configuration file: " + e.getMessage());
-      } catch (InterruptedException e) {
-        System.err.println("Error while starting the gossip service: " + e.getMessage());
-      }
-    } else {
-      System.out
-              .println("The gossip.conf file is not found.\n\nEither specify the path to the startup settings file or place the gossip.json file in the same folder as the JAR file.");
-    }
-  }
-}

http://git-wip-us.apache.org/repos/asf/incubator-gossip/blob/968203e8/src/main/java/com/google/code/gossip/GossipService.java
----------------------------------------------------------------------
diff --git a/src/main/java/com/google/code/gossip/GossipService.java b/src/main/java/com/google/code/gossip/GossipService.java
deleted file mode 100644
index 2226a48..0000000
--- a/src/main/java/com/google/code/gossip/GossipService.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.google.code.gossip;
-
-import java.net.InetAddress;
-import java.net.UnknownHostException;
-import java.util.List;
-
-import org.apache.log4j.Logger;
-
-import com.google.code.gossip.event.GossipListener;
-import com.google.code.gossip.manager.GossipManager;
-import com.google.code.gossip.manager.random.RandomGossipManager;
-
-/**
- * This object represents the service which is responsible for gossiping with other gossip members.
- * 
- * @author joshclemm, harmenw
- */
-public class GossipService {
-
-  public static final Logger LOGGER = Logger.getLogger(GossipService.class);
-
-  private GossipManager gossipManager;
-
-  /**
-   * Constructor with the default settings.
-   * 
-   * @throws InterruptedException
-   * @throws UnknownHostException
-   */
-  public GossipService(StartupSettings startupSettings) throws InterruptedException,
-          UnknownHostException {
-    this(startupSettings.getCluster(), InetAddress.getLocalHost().getHostAddress(), startupSettings
-            .getPort(), startupSettings.getId(), startupSettings.getGossipMembers(),
-            startupSettings.getGossipSettings(), null);
-  }
-
-  /**
-   * Setup the client's lists, gossiping parameters, and parse the startup config file.
-   * 
-   * @throws InterruptedException
-   * @throws UnknownHostException
-   */
-  public GossipService(String cluster, String ipAddress, int port, String id,
-          List<GossipMember> gossipMembers, GossipSettings settings, GossipListener listener)
-          throws InterruptedException, UnknownHostException {
-    gossipManager = new RandomGossipManager(cluster, ipAddress, port, id, settings, gossipMembers,
-            listener);
-  }
-
-  public void start() {
-    String address = get_gossipManager().getMyself().getHost() + ":"
-            + get_gossipManager().getMyself().getPort();
-    LOGGER.debug("Starting: " + gossipManager.getName() + " - " + address);
-
-    gossipManager.start();
-  }
-
-  public void shutdown() {
-    gossipManager.shutdown();
-  }
-
-  public GossipManager get_gossipManager() {
-    return gossipManager;
-  }
-
-  public void set_gossipManager(GossipManager _gossipManager) {
-    this.gossipManager = _gossipManager;
-  }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-gossip/blob/968203e8/src/main/java/com/google/code/gossip/GossipSettings.java
----------------------------------------------------------------------
diff --git a/src/main/java/com/google/code/gossip/GossipSettings.java b/src/main/java/com/google/code/gossip/GossipSettings.java
deleted file mode 100644
index ec9aae1..0000000
--- a/src/main/java/com/google/code/gossip/GossipSettings.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.google.code.gossip;
-
-/**
- * In this object the settings used by the GossipService are held.
- * 
- * @author harmenw
- */
-public class GossipSettings {
-
-  /** Time between gossip'ing in ms. Default is 1 second. */
-  private int gossipInterval = 1000;
-
-  /** Time between cleanups in ms. Default is 10 seconds. */
-  private int cleanupInterval = 10000;
-
-  /**
-   * Construct GossipSettings with default settings.
-   */
-  public GossipSettings() {
-  }
-
-  /**
-   * Construct GossipSettings with given settings.
-   * 
-   * @param gossipInterval
-   *          The gossip interval in ms.
-   * @param cleanupInterval
-   *          The cleanup interval in ms.
-   */
-  public GossipSettings(int gossipInterval, int cleanupInterval) {
-    this.gossipInterval = gossipInterval;
-    this.cleanupInterval = cleanupInterval;
-  }
-
-  /**
-   * Set the gossip interval. This is the time between a gossip message is send.
-   * 
-   * @param gossipInterval
-   *          The gossip interval in ms.
-   */
-  public void setGossipTimeout(int gossipInterval) {
-    this.gossipInterval = gossipInterval;
-  }
-
-  /**
-   * Set the cleanup interval. This is the time between the last heartbeat received from a member
-   * and when it will be marked as dead.
-   * 
-   * @param cleanupInterval
-   *          The cleanup interval in ms.
-   */
-  public void setCleanupInterval(int cleanupInterval) {
-    this.cleanupInterval = cleanupInterval;
-  }
-
-  /**
-   * Get the gossip interval.
-   * 
-   * @return The gossip interval in ms.
-   */
-  public int getGossipInterval() {
-    return gossipInterval;
-  }
-
-  /**
-   * Get the clean interval.
-   * 
-   * @return The cleanup interval.
-   */
-  public int getCleanupInterval() {
-    return cleanupInterval;
-  }
-}

http://git-wip-us.apache.org/repos/asf/incubator-gossip/blob/968203e8/src/main/java/com/google/code/gossip/GossipTimeoutTimer.java
----------------------------------------------------------------------
diff --git a/src/main/java/com/google/code/gossip/GossipTimeoutTimer.java b/src/main/java/com/google/code/gossip/GossipTimeoutTimer.java
deleted file mode 100644
index a1bf130..0000000
--- a/src/main/java/com/google/code/gossip/GossipTimeoutTimer.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.google.code.gossip;
-
-import java.util.Date;
-
-import javax.management.NotificationListener;
-import javax.management.timer.Timer;
-
-/**
- * This object represents a timer for a gossip member. When the timer has elapsed without being
- * reset in the meantime, it will inform the GossipService about this who in turn will put the
- * gossip member on the dead list, because it is apparantly not alive anymore.
- * 
- * @author joshclemm, harmenw
- */
-public class GossipTimeoutTimer extends Timer {
-
-  private final long sleepTime;
-
-  private final LocalGossipMember source;
-
-  /**
-   * Constructor. Creates a reset-able timer that wakes up after millisecondsSleepTime.
-   * 
-   * @param millisecondsSleepTime
-   *          The time for this timer to wait before an event.
-   * @param notificationListener
-   * @param member
-   */
-  public GossipTimeoutTimer(long millisecondsSleepTime, NotificationListener notificationListener,
-          LocalGossipMember member) {
-    super();
-    sleepTime = millisecondsSleepTime;
-    source = member;
-    addNotificationListener(notificationListener, null, null);
-  }
-
-  /**
-   * @see javax.management.timer.Timer#start()
-   */
-  public void start() {
-    this.reset();
-    super.start();
-  }
-
-  /**
-   * Resets timer to start counting down from original time.
-   */
-  public void reset() {
-    removeAllNotifications();
-    setWakeupTime(sleepTime);
-  }
-
-  /**
-   * Adds a new wake-up time for this timer.
-   * 
-   * @param milliseconds
-   */
-  private void setWakeupTime(long milliseconds) {
-    addNotification("type", "message", source, new Date(System.currentTimeMillis() + milliseconds));
-  }
-}

http://git-wip-us.apache.org/repos/asf/incubator-gossip/blob/968203e8/src/main/java/com/google/code/gossip/LocalGossipMember.java
----------------------------------------------------------------------
diff --git a/src/main/java/com/google/code/gossip/LocalGossipMember.java b/src/main/java/com/google/code/gossip/LocalGossipMember.java
deleted file mode 100644
index 216da96..0000000
--- a/src/main/java/com/google/code/gossip/LocalGossipMember.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.google.code.gossip;
-
-import javax.management.NotificationListener;
-
-/**
- * This object represent a gossip member with the properties known locally. These objects are stored
- * in the local list of gossip member.s
- * 
- * @author harmenw
- */
-public class LocalGossipMember extends GossipMember {
-  /** The timeout timer for this gossip member. */
-  private final transient GossipTimeoutTimer timeoutTimer;
-
-  /**
-   * Constructor.
-   * 
-   * @param hostname
-   *          The hostname or IP address.
-   * @param port
-   *          The port number.
-   * @param id
-   * @param heartbeat
-   *          The current heartbeat.
-   * @param notificationListener
-   * @param cleanupTimeout
-   *          The cleanup timeout for this gossip member.
-   */
-  public LocalGossipMember(String clusterName, String hostname, int port, String id,
-          long heartbeat, NotificationListener notificationListener, int cleanupTimeout) {
-    super(clusterName, hostname, port, id, heartbeat);
-
-    timeoutTimer = new GossipTimeoutTimer(cleanupTimeout, notificationListener, this);
-  }
-
-  /**
-   * Start the timeout timer.
-   */
-  public void startTimeoutTimer() {
-    timeoutTimer.start();
-  }
-
-  /**
-   * Reset the timeout timer.
-   */
-  public void resetTimeoutTimer() {
-    timeoutTimer.reset();
-  }
-
-  public void disableTimer() {
-    timeoutTimer.removeAllNotifications();
-  }
-}

http://git-wip-us.apache.org/repos/asf/incubator-gossip/blob/968203e8/src/main/java/com/google/code/gossip/RemoteGossipMember.java
----------------------------------------------------------------------
diff --git a/src/main/java/com/google/code/gossip/RemoteGossipMember.java b/src/main/java/com/google/code/gossip/RemoteGossipMember.java
deleted file mode 100644
index a7c3a1f..0000000
--- a/src/main/java/com/google/code/gossip/RemoteGossipMember.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.google.code.gossip;
-
-/**
- * The object represents a gossip member with the properties as received from a remote gossip
- * member.
- * 
- * @author harmenw
- */
-public class RemoteGossipMember extends GossipMember {
-
-  /**
-   * Constructor.
-   * 
-   * @param hostname
-   *          The hostname or IP address.
-   * @param port
-   *          The port number.
-   * @param heartbeat
-   *          The current heartbeat.
-   */
-  public RemoteGossipMember(String clusterName, String hostname, int port, String id, long heartbeat) {
-    super(clusterName, hostname, port, id, heartbeat);
-  }
-
-  /**
-   * Construct a RemoteGossipMember with a heartbeat of 0.
-   * 
-   * @param hostname
-   *          The hostname or IP address.
-   * @param port
-   *          The port number.
-   */
-  public RemoteGossipMember(String clusterName, String hostname, int port, String id) {
-    super(clusterName, hostname, port, id, System.currentTimeMillis());
-  }
-}

http://git-wip-us.apache.org/repos/asf/incubator-gossip/blob/968203e8/src/main/java/com/google/code/gossip/StartupSettings.java
----------------------------------------------------------------------
diff --git a/src/main/java/com/google/code/gossip/StartupSettings.java b/src/main/java/com/google/code/gossip/StartupSettings.java
deleted file mode 100644
index 53ed725..0000000
--- a/src/main/java/com/google/code/gossip/StartupSettings.java
+++ /dev/null
@@ -1,212 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.google.code.gossip;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileReader;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.log4j.Logger;
-import org.json.JSONArray;
-import org.json.JSONException;
-import org.json.JSONObject;
-
-/**
- * This object represents the settings used when starting the gossip service.
- * 
- * @author harmenw
- */
-public class StartupSettings {
-  private static final Logger log = Logger.getLogger(StartupSettings.class);
-
-  /** The id to use fo the service */
-  private String id;
-
-  /** The port to start the gossip service on. */
-  private int port;
-
-  private String cluster;
-
-  /** The gossip settings used at startup. */
-  private final GossipSettings gossipSettings;
-
-  /** The list with gossip members to start with. */
-  private final List<GossipMember> gossipMembers;
-
-  /**
-   * Constructor.
-   * 
-   * @param id
-   *          The id to be used for this service
-   * @param port
-   *          The port to start the service on.
-   * @param logLevel
-   *          unused
-   */
-  public StartupSettings(String id, int port, int logLevel, String cluster) {
-    this(id, port, new GossipSettings(), cluster);
-  }
-
-  /**
-   * Constructor.
-   * 
-   * @param id
-   *          The id to be used for this service
-   * @param port
-   *          The port to start the service on.
-   */
-  public StartupSettings(String id, int port, GossipSettings gossipSettings, String cluster) {
-    this.id = id;
-    this.port = port;
-    this.gossipSettings = gossipSettings;
-    this.setCluster(cluster);
-    gossipMembers = new ArrayList<>();
-  }
-
-  public void setCluster(String cluster) {
-    this.cluster = cluster;
-  }
-
-  public String getCluster() {
-    return cluster;
-  }
-
-  /**
-   * Set the id to be used for this service.
-   * 
-   * @param id
-   *          The id for this service.
-   */
-  public void setId(String id) {
-    this.id = id;
-  }
-
-  /**
-   * Get the id for this service.
-   * 
-   * @return the service's id.
-   */
-  public String getId() {
-    return id;
-  }
-
-  /**
-   * Set the port of the gossip service.
-   * 
-   * @param port
-   *          The port for the gossip service.
-   */
-  public void setPort(int port) {
-    this.port = port;
-  }
-
-  /**
-   * Get the port for the gossip service.
-   * 
-   * @return The port of the gossip service.
-   */
-  public int getPort() {
-    return port;
-  }
-
-  /**
-   * Get the GossipSettings.
-   * 
-   * @return The GossipSettings object.
-   */
-  public GossipSettings getGossipSettings() {
-    return gossipSettings;
-  }
-
-  /**
-   * Add a gossip member to the list of members to start with.
-   * 
-   * @param member
-   *          The member to add.
-   */
-  public void addGossipMember(GossipMember member) {
-    gossipMembers.add(member);
-  }
-
-  /**
-   * Get the list with gossip members.
-   * 
-   * @return The gossip members.
-   */
-  public List<GossipMember> getGossipMembers() {
-    return gossipMembers;
-  }
-
-  /**
-   * Parse the settings for the gossip service from a JSON file.
-   * 
-   * @param jsonFile
-   *          The file object which refers to the JSON config file.
-   * @return The StartupSettings object with the settings from the config file.
-   * @throws JSONException
-   *           Thrown when the file is not well-formed JSON.
-   * @throws FileNotFoundException
-   *           Thrown when the file cannot be found.
-   * @throws IOException
-   *           Thrown when reading the file gives problems.
-   */
-  public static StartupSettings fromJSONFile(File jsonFile) throws JSONException,
-          FileNotFoundException, IOException {
-    // Read the file to a String.
-    StringBuffer buffer = new StringBuffer();
-    try (BufferedReader br = new BufferedReader(new FileReader(jsonFile)) ){
-      String line;
-      while ((line = br.readLine()) != null) {
-        buffer.append(line.trim());
-      }
-    }
-    
-    JSONObject jsonObject = new JSONArray(buffer.toString()).getJSONObject(0);
-    int port = jsonObject.getInt("port");
-    String id = jsonObject.getString("id");
-    int gossipInterval = jsonObject.getInt("gossip_interval");
-    int cleanupInterval = jsonObject.getInt("cleanup_interval");
-    String cluster = jsonObject.getString("cluster");
-    if (cluster == null){
-      throw new IllegalArgumentException("cluster was null. It is required");
-    }
-    StartupSettings settings = new StartupSettings(id, port, new GossipSettings(gossipInterval,
-            cleanupInterval), cluster);
-
-    // Now iterate over the members from the config file and add them to the settings.
-    String configMembersDetails = "Config-members [";
-    JSONArray membersJSON = jsonObject.getJSONArray("members");
-    for (int i = 0; i < membersJSON.length(); i++) {
-      JSONObject memberJSON = membersJSON.getJSONObject(i);
-      RemoteGossipMember member = new RemoteGossipMember(memberJSON.getString("cluster"),
-              memberJSON.getString("host"), memberJSON.getInt("port"), "");
-      settings.addGossipMember(member);
-      configMembersDetails += member.getAddress();
-      if (i < (membersJSON.length() - 1))
-        configMembersDetails += ", ";
-    }
-    log.info(configMembersDetails + "]");
-
-    // Return the created settings object.
-    return settings;
-  }
-}

http://git-wip-us.apache.org/repos/asf/incubator-gossip/blob/968203e8/src/main/java/com/google/code/gossip/event/GossipListener.java
----------------------------------------------------------------------
diff --git a/src/main/java/com/google/code/gossip/event/GossipListener.java b/src/main/java/com/google/code/gossip/event/GossipListener.java
deleted file mode 100644
index 424984c..0000000
--- a/src/main/java/com/google/code/gossip/event/GossipListener.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.google.code.gossip.event;
-
-import com.google.code.gossip.GossipMember;
-
-public interface GossipListener {
-  void gossipEvent(GossipMember member, GossipState state);
-}

http://git-wip-us.apache.org/repos/asf/incubator-gossip/blob/968203e8/src/main/java/com/google/code/gossip/event/GossipState.java
----------------------------------------------------------------------
diff --git a/src/main/java/com/google/code/gossip/event/GossipState.java b/src/main/java/com/google/code/gossip/event/GossipState.java
deleted file mode 100644
index e303c89..0000000
--- a/src/main/java/com/google/code/gossip/event/GossipState.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.google.code.gossip.event;
-
-public enum GossipState {
-  UP("up"), DOWN("down");
-  @SuppressWarnings("unused")
-  private final String state;
-
-  private GossipState(String state) {
-    this.state = state;
-  }
-}

http://git-wip-us.apache.org/repos/asf/incubator-gossip/blob/968203e8/src/main/java/com/google/code/gossip/examples/GossipExample.java
----------------------------------------------------------------------
diff --git a/src/main/java/com/google/code/gossip/examples/GossipExample.java b/src/main/java/com/google/code/gossip/examples/GossipExample.java
deleted file mode 100644
index b82bb40..0000000
--- a/src/main/java/com/google/code/gossip/examples/GossipExample.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.google.code.gossip.examples;
-
-import java.net.InetAddress;
-import java.net.UnknownHostException;
-import java.util.ArrayList;
-import java.util.List;
-
-import com.google.code.gossip.GossipMember;
-import com.google.code.gossip.GossipService;
-import com.google.code.gossip.GossipSettings;
-import com.google.code.gossip.RemoteGossipMember;
-
-/**
- * This class is an example of how one could use the gossip service. Here we start multiple gossip
- * clients on this host as specified in the config file.
- * 
- * @author harmenw
- */
-public class GossipExample extends Thread {
-  /** The number of clients to start. */
-  private static final int NUMBER_OF_CLIENTS = 4;
-
-  /**
-   * @param args
-   */
-  public static void main(String[] args) {
-    new GossipExample();
-  }
-
-  /**
-   * Constructor. This will start the this thread.
-   */
-  public GossipExample() {
-    start();
-  }
-
-  /**
-   * @see java.lang.Thread#run()
-   */
-  public void run() {
-    try {
-      GossipSettings settings = new GossipSettings();
-
-      List<GossipService> clients = new ArrayList<>();
-
-      // Get my ip address.
-      String myIpAddress = InetAddress.getLocalHost().getHostAddress();
-
-      String cluster = "My Gossip Cluster";
-
-      // Create the gossip members and put them in a list and give them a port number starting with
-      // 2000.
-      List<GossipMember> startupMembers = new ArrayList<>();
-      for (int i = 0; i < NUMBER_OF_CLIENTS; ++i) {
-        startupMembers.add(new RemoteGossipMember(cluster, 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(cluster, myIpAddress, member.getPort(), "",
-                startupMembers, settings, null);
-        clients.add(gossipService);
-        gossipService.start();
-        sleep(settings.getCleanupInterval() + 1000);
-      }
-
-      // After starting all gossip clients, first wait 10 seconds and then shut them down.
-      sleep(10000);
-      System.err.println("Going to shutdown all services...");
-      // Since they all run in the same virtual machine and share the same executor, if one is
-      // shutdown they will all stop.
-      clients.get(0).shutdown();
-
-    } catch (UnknownHostException e) {
-      e.printStackTrace();
-    } catch (InterruptedException e) {
-      e.printStackTrace();
-    }
-  }
-}

http://git-wip-us.apache.org/repos/asf/incubator-gossip/blob/968203e8/src/main/java/com/google/code/gossip/manager/ActiveGossipThread.java
----------------------------------------------------------------------
diff --git a/src/main/java/com/google/code/gossip/manager/ActiveGossipThread.java b/src/main/java/com/google/code/gossip/manager/ActiveGossipThread.java
deleted file mode 100644
index 9b0bd5c..0000000
--- a/src/main/java/com/google/code/gossip/manager/ActiveGossipThread.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.google.code.gossip.manager;
-
-import java.util.List;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.atomic.AtomicBoolean;
-
-import com.google.code.gossip.GossipService;
-import com.google.code.gossip.LocalGossipMember;
-
-/**
- * [The active thread: periodically send gossip request.] The class handles gossiping the membership
- * list. This information is important to maintaining a common state among all the nodes, and is
- * important for detecting failures.
- */
-abstract public class ActiveGossipThread implements Runnable {
-
-  protected final GossipManager gossipManager;
-
-  private final AtomicBoolean keepRunning;
-
-  public ActiveGossipThread(GossipManager gossipManager) {
-    this.gossipManager = gossipManager;
-    this.keepRunning = new AtomicBoolean(true);
-  }
-
-  @Override
-  public void run() {
-    while (keepRunning.get()) {
-      try {
-        TimeUnit.MILLISECONDS.sleep(gossipManager.getSettings().getGossipInterval());
-        sendMembershipList(gossipManager.getMyself(), gossipManager.getMemberList());
-      } catch (InterruptedException e) {
-        GossipService.LOGGER.error(e);
-        keepRunning.set(false);
-      }
-    }
-    shutdown();
-  }
-
-  public void shutdown() {
-    keepRunning.set(false);
-  }
-
-  /**
-   * Performs the sending of the membership list, after we have incremented our own heartbeat.
-   */
-  abstract protected void sendMembershipList(LocalGossipMember me,
-          List<LocalGossipMember> memberList);
-
-  /**
-   * Abstract method which should be implemented by a subclass. This method should return a member
-   * of the list to gossip with.
-   * 
-   * @param memberList
-   *          The list of members which are stored in the local list of members.
-   * @return The chosen LocalGossipMember to gossip with.
-   */
-  abstract protected LocalGossipMember selectPartner(List<LocalGossipMember> memberList);
-}

http://git-wip-us.apache.org/repos/asf/incubator-gossip/blob/968203e8/src/main/java/com/google/code/gossip/manager/GossipManager.java
----------------------------------------------------------------------
diff --git a/src/main/java/com/google/code/gossip/manager/GossipManager.java b/src/main/java/com/google/code/gossip/manager/GossipManager.java
deleted file mode 100644
index 42354b6..0000000
--- a/src/main/java/com/google/code/gossip/manager/GossipManager.java
+++ /dev/null
@@ -1,217 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.google.code.gossip.manager;
-
-import java.lang.reflect.InvocationTargetException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map.Entry;
-import java.util.concurrent.ConcurrentSkipListMap;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.atomic.AtomicBoolean;
-
-import javax.management.Notification;
-import javax.management.NotificationListener;
-
-import org.apache.log4j.Logger;
-
-import com.google.code.gossip.GossipMember;
-import com.google.code.gossip.GossipService;
-import com.google.code.gossip.GossipSettings;
-import com.google.code.gossip.LocalGossipMember;
-import com.google.code.gossip.event.GossipListener;
-import com.google.code.gossip.event.GossipState;
-
-public abstract class GossipManager extends Thread implements NotificationListener {
-
-  public static final Logger LOGGER = Logger.getLogger(GossipManager.class);
-
-  public static final int MAX_PACKET_SIZE = 102400;
-
-  private final ConcurrentSkipListMap<LocalGossipMember, GossipState> members;
-
-  private final LocalGossipMember me;
-
-  private final GossipSettings settings;
-
-  private final AtomicBoolean gossipServiceRunning;
-
-  private final Class<? extends PassiveGossipThread> passiveGossipThreadClass;
-
-  private final Class<? extends ActiveGossipThread> activeGossipThreadClass;
-
-  private final GossipListener listener;
-
-  private ActiveGossipThread activeGossipThread;
-
-  private PassiveGossipThread passiveGossipThread;
-
-  private ExecutorService gossipThreadExecutor;
-
-  public GossipManager(Class<? extends PassiveGossipThread> passiveGossipThreadClass,
-          Class<? extends ActiveGossipThread> activeGossipThreadClass, String cluster,
-          String address, int port, String id, GossipSettings settings,
-          List<GossipMember> gossipMembers, GossipListener listener) {
-    this.passiveGossipThreadClass = passiveGossipThreadClass;
-    this.activeGossipThreadClass = activeGossipThreadClass;
-    this.settings = settings;
-    me = new LocalGossipMember(cluster, address, port, id, System.currentTimeMillis(), this,
-            settings.getCleanupInterval());
-    members = new ConcurrentSkipListMap<>();
-    for (GossipMember startupMember : gossipMembers) {
-      if (!startupMember.equals(me)) {
-        LocalGossipMember member = new LocalGossipMember(startupMember.getClusterName(),
-                startupMember.getHost(), startupMember.getPort(), startupMember.getId(),
-                System.currentTimeMillis(), this, settings.getCleanupInterval());
-        members.put(member, GossipState.UP);
-        GossipService.LOGGER.debug(member);
-      }
-    }
-    gossipThreadExecutor = Executors.newCachedThreadPool();
-    gossipServiceRunning = new AtomicBoolean(true);
-    this.listener = listener;
-    Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
-      public void run() {
-        GossipService.LOGGER.debug("Service has been shutdown...");
-      }
-    }));
-  }
-
-  /**
-   * All timers associated with a member will trigger this method when it goes off. The timer will
-   * go off if we have not heard from this member in <code> _settings.T_CLEANUP </code> time.
-   */
-  @Override
-  public void handleNotification(Notification notification, Object handback) {
-    LocalGossipMember deadMember = (LocalGossipMember) notification.getUserData();
-    GossipService.LOGGER.debug("Dead member detected: " + deadMember);
-    members.put(deadMember, GossipState.DOWN);
-    if (listener != null) {
-      listener.gossipEvent(deadMember, GossipState.DOWN);
-    }
-  }
-
-  public void revivieMember(LocalGossipMember m) {
-    for (Entry<LocalGossipMember, GossipState> it : this.members.entrySet()) {
-      if (it.getKey().getId().equals(m.getId())) {
-        it.getKey().disableTimer();
-      }
-    }
-    members.remove(m);
-    members.put(m, GossipState.UP);
-    if (listener != null) {
-      listener.gossipEvent(m, GossipState.UP);
-    }
-  }
-
-  public void createOrRevivieMember(LocalGossipMember m) {
-    members.put(m, GossipState.UP);
-    if (listener != null) {
-      listener.gossipEvent(m, GossipState.UP);
-    }
-  }
-
-  public GossipSettings getSettings() {
-    return settings;
-  }
-
-  /**
-   * 
-   * @return a read only list of members found in the UP state
-   */
-  public List<LocalGossipMember> getMemberList() {
-    List<LocalGossipMember> up = new ArrayList<>();
-    for (Entry<LocalGossipMember, GossipState> entry : members.entrySet()) {
-      if (GossipState.UP.equals(entry.getValue())) {
-        up.add(entry.getKey());
-      }
-    }
-    return Collections.unmodifiableList(up);
-  }
-
-  public LocalGossipMember getMyself() {
-    return me;
-  }
-
-  public List<LocalGossipMember> getDeadList() {
-    List<LocalGossipMember> up = new ArrayList<>();
-    for (Entry<LocalGossipMember, GossipState> entry : members.entrySet()) {
-      if (GossipState.DOWN.equals(entry.getValue())) {
-        up.add(entry.getKey());
-      }
-    }
-    return Collections.unmodifiableList(up);
-  }
-
-  /**
-   * Starts the client. Specifically, start the various cycles for this protocol. Start the gossip
-   * thread and start the receiver thread.
-   */
-  public void run() {
-    for (LocalGossipMember member : members.keySet()) {
-      if (member != me) {
-        member.startTimeoutTimer();
-      }
-    }
-    try {
-      passiveGossipThread = passiveGossipThreadClass.getConstructor(GossipManager.class)
-              .newInstance(this);
-      gossipThreadExecutor.execute(passiveGossipThread);
-      activeGossipThread = activeGossipThreadClass.getConstructor(GossipManager.class)
-              .newInstance(this);
-      gossipThreadExecutor.execute(activeGossipThread);
-    } catch (InstantiationException | IllegalAccessException | IllegalArgumentException
-            | InvocationTargetException | NoSuchMethodException | SecurityException e1) {
-      throw new RuntimeException(e1);
-    }
-    GossipService.LOGGER.debug("The GossipService is started.");
-    while (gossipServiceRunning.get()) {
-      try {
-        // TODO
-        TimeUnit.MILLISECONDS.sleep(1);
-      } catch (InterruptedException e) {
-        GossipService.LOGGER.warn("The GossipClient was interrupted.");
-      }
-    }
-  }
-
-  /**
-   * Shutdown the gossip service.
-   */
-  public void shutdown() {
-    gossipServiceRunning.set(false);
-    gossipThreadExecutor.shutdown();
-    if (passiveGossipThread != null) {
-      passiveGossipThread.shutdown();
-    }
-    if (activeGossipThread != null) {
-      activeGossipThread.shutdown();
-    }
-    try {
-      boolean result = gossipThreadExecutor.awaitTermination(1000, TimeUnit.MILLISECONDS);
-      if (!result) {
-        LOGGER.error("executor shutdown timed out");
-      }
-    } catch (InterruptedException e) {
-      LOGGER.error(e);
-    }
-  }
-}

http://git-wip-us.apache.org/repos/asf/incubator-gossip/blob/968203e8/src/main/java/com/google/code/gossip/manager/PassiveGossipThread.java
----------------------------------------------------------------------
diff --git a/src/main/java/com/google/code/gossip/manager/PassiveGossipThread.java b/src/main/java/com/google/code/gossip/manager/PassiveGossipThread.java
deleted file mode 100644
index 6bf1494..0000000
--- a/src/main/java/com/google/code/gossip/manager/PassiveGossipThread.java
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.google.code.gossip.manager;
-
-import java.io.IOException;
-import java.net.DatagramPacket;
-import java.net.DatagramSocket;
-import java.net.InetSocketAddress;
-import java.net.SocketAddress;
-import java.net.SocketException;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.concurrent.atomic.AtomicBoolean;
-
-import org.apache.log4j.Logger;
-import org.codehaus.jackson.map.ObjectMapper;
-import com.google.code.gossip.GossipMember;
-import com.google.code.gossip.GossipService;
-import com.google.code.gossip.RemoteGossipMember;
-import com.google.code.gossip.model.ActiveGossipMessage;
-
-/**
- * [The passive thread: reply to incoming gossip request.] This class handles the passive cycle,
- * where this client has received an incoming message. For now, this message is always the
- * membership list, but if you choose to gossip additional information, you will need some logic to
- * determine the incoming message.
- */
-abstract public class PassiveGossipThread implements Runnable {
-
-  public static final Logger LOGGER = Logger.getLogger(PassiveGossipThread.class);
-
-  /** The socket used for the passive thread of the gossip service. */
-  private final DatagramSocket server;
-
-  private final GossipManager gossipManager;
-
-  private final AtomicBoolean keepRunning;
-
-  private final String cluster;
-  
-  private final ObjectMapper MAPPER = new ObjectMapper();
-
-  public PassiveGossipThread(GossipManager gossipManager) {
-    this.gossipManager = gossipManager;
-    try {
-      SocketAddress socketAddress = new InetSocketAddress(gossipManager.getMyself().getHost(),
-              gossipManager.getMyself().getPort());
-      server = new DatagramSocket(socketAddress);
-      GossipService.LOGGER.debug("Gossip service successfully initialized on port "
-              + gossipManager.getMyself().getPort());
-      GossipService.LOGGER.debug("I am " + gossipManager.getMyself());
-      cluster = gossipManager.getMyself().getClusterName();
-      if (cluster == null){
-        throw new IllegalArgumentException("cluster was null");
-      }
-    } catch (SocketException ex) {
-      GossipService.LOGGER.warn(ex);
-      throw new RuntimeException(ex);
-    }
-    keepRunning = new AtomicBoolean(true);
-  }
-
-  @Override
-  public void run() {
-    while (keepRunning.get()) {
-      try {
-        byte[] buf = new byte[server.getReceiveBufferSize()];
-        DatagramPacket p = new DatagramPacket(buf, buf.length);
-        server.receive(p);
-        int packet_length = 0;
-        for (int i = 0; i < 4; i++) {
-          int shift = (4 - 1 - i) * 8;
-          packet_length += (buf[i] & 0x000000FF) << shift;
-        }
-        if (packet_length <= GossipManager.MAX_PACKET_SIZE) {
-          byte[] json_bytes = new byte[packet_length];
-          for (int i = 0; i < packet_length; i++) {
-            json_bytes[i] = buf[i + 4];
-          }
-          if (GossipService.LOGGER.isDebugEnabled()){
-            String receivedMessage = new String(json_bytes);
-            GossipService.LOGGER.debug("Received message (" + packet_length + " bytes): "
-                  + receivedMessage);
-          }
-          try {
-            List<GossipMember> remoteGossipMembers = new ArrayList<>();
-            RemoteGossipMember senderMember = null;
-            ActiveGossipMessage activeGossipMessage = MAPPER.readValue(json_bytes,
-                    ActiveGossipMessage.class);
-            for (int i = 0; i < activeGossipMessage.getMembers().size(); i++) {
-              RemoteGossipMember member = new RemoteGossipMember(
-                      activeGossipMessage.getMembers().get(i).getCluster(),
-                      activeGossipMessage.getMembers().get(i).getHost(),
-                      activeGossipMessage.getMembers().get(i).getPort(),
-                      activeGossipMessage.getMembers().get(i).getId(),
-                      activeGossipMessage.getMembers().get(i).getHeartbeat());
-              if (!(member.getClusterName().equals(cluster))){
-                GossipService.LOGGER.warn("Note a member of this cluster " + i);
-                continue;
-              }
-              // This is the first member found, so this should be the member who is communicating
-              // with me.
-              if (i == 0) {
-                senderMember = member;
-              } 
-              remoteGossipMembers.add(member);
-            }
-            mergeLists(gossipManager, senderMember, remoteGossipMembers);
-          } catch (RuntimeException ex) {
-            GossipService.LOGGER.error("Unable to process message", ex);
-          }
-        } else {
-          GossipService.LOGGER
-                  .error("The received message is not of the expected size, it has been dropped.");
-        }
-
-      } catch (IOException e) {
-        GossipService.LOGGER.error(e);
-        System.out.println(e);
-        keepRunning.set(false);
-      }
-    }
-    shutdown();
-  }
-
-  public void shutdown() {
-    try {
-      server.close();
-    } catch (RuntimeException ex) {
-    }
-  }
-
-  /**
-   * Abstract method for merging the local and remote list.
-   * 
-   * @param gossipManager
-   *          The GossipManager for retrieving the local members and dead members list.
-   * @param senderMember
-   *          The member who is sending this list, this could be used to send a response if the
-   *          remote list contains out-dated information.
-   * @param remoteList
-   *          The list of members known at the remote side.
-   */
-  abstract protected void mergeLists(GossipManager gossipManager, RemoteGossipMember senderMember,
-          List<GossipMember> remoteList);
-}
-
-/*
- * random comments // Check whether the package is smaller than the maximal packet length. // A
- * package larger than this would not be possible to be send from a GossipService, // since this is
- * check before sending the message. // This could normally only occur when the list of members is
- * very big, // or when the packet is malformed, and the first 4 bytes is not the right in anymore.
- * // For this reason we regards the message.
- */

http://git-wip-us.apache.org/repos/asf/incubator-gossip/blob/968203e8/src/main/java/com/google/code/gossip/manager/impl/OnlyProcessReceivedPassiveGossipThread.java
----------------------------------------------------------------------
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
deleted file mode 100644
index 08d573a..0000000
--- a/src/main/java/com/google/code/gossip/manager/impl/OnlyProcessReceivedPassiveGossipThread.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.google.code.gossip.manager.impl;
-
-import java.util.List;
-
-import com.google.code.gossip.GossipMember;
-import com.google.code.gossip.GossipService;
-import com.google.code.gossip.LocalGossipMember;
-import com.google.code.gossip.RemoteGossipMember;
-import com.google.code.gossip.manager.GossipManager;
-import com.google.code.gossip.manager.PassiveGossipThread;
-
-public class OnlyProcessReceivedPassiveGossipThread extends PassiveGossipThread {
-
-  public OnlyProcessReceivedPassiveGossipThread(GossipManager gossipManager) {
-    super(gossipManager);
-  }
-
-  /**
-   * Merge remote list (received from peer), and our local member list. Simply, we must update the
-   * heartbeats that the remote list has with our list. Also, some additional logic is needed to
-   * make sure we have not timed out a member and then immediately received a list with that member.
-   * 
-   * @param gossipManager
-   * @param senderMember
-   * @param remoteList
-   */
-  protected void mergeLists(GossipManager gossipManager, RemoteGossipMember senderMember,
-          List<GossipMember> remoteList) {
-
-    // if the person sending to us is in the dead list consider them up
-    for (LocalGossipMember i : gossipManager.getDeadList()) {
-      if (i.getId().equals(senderMember.getId())) {
-        System.out.println(gossipManager.getMyself() + " caught a live one!");
-        LocalGossipMember newLocalMember = new LocalGossipMember(senderMember.getClusterName(),
-                senderMember.getHost(), senderMember.getPort(), senderMember.getId(),
-                senderMember.getHeartbeat(), gossipManager, gossipManager.getSettings()
-                        .getCleanupInterval());
-        gossipManager.revivieMember(newLocalMember);
-        newLocalMember.startTimeoutTimer();
-      }
-    }
-    for (GossipMember remoteMember : remoteList) {
-      if (remoteMember.getId().equals(gossipManager.getMyself().getId())) {
-        continue;
-      }
-      if (gossipManager.getMemberList().contains(remoteMember)) {
-        LocalGossipMember localMember = gossipManager.getMemberList().get(
-                gossipManager.getMemberList().indexOf(remoteMember));
-        if (remoteMember.getHeartbeat() > localMember.getHeartbeat()) {
-          localMember.setHeartbeat(remoteMember.getHeartbeat());
-          localMember.resetTimeoutTimer();
-        }
-      } else if (!gossipManager.getMemberList().contains(remoteMember)
-              && !gossipManager.getDeadList().contains(remoteMember)) {
-        LocalGossipMember newLocalMember = new LocalGossipMember(remoteMember.getClusterName(),
-                remoteMember.getHost(), remoteMember.getPort(), remoteMember.getId(),
-                remoteMember.getHeartbeat(), gossipManager, gossipManager.getSettings()
-                        .getCleanupInterval());
-        gossipManager.createOrRevivieMember(newLocalMember);
-        newLocalMember.startTimeoutTimer();
-      } else {
-        if (gossipManager.getDeadList().contains(remoteMember)) {
-          LocalGossipMember localDeadMember = gossipManager.getDeadList().get(
-                  gossipManager.getDeadList().indexOf(remoteMember));
-          if (remoteMember.getHeartbeat() > localDeadMember.getHeartbeat()) {
-            LocalGossipMember newLocalMember = new LocalGossipMember(remoteMember.getClusterName(),
-                    remoteMember.getHost(), remoteMember.getPort(), remoteMember.getId(),
-                    remoteMember.getHeartbeat(), gossipManager, gossipManager.getSettings()
-                            .getCleanupInterval());
-            gossipManager.revivieMember(newLocalMember);
-            newLocalMember.startTimeoutTimer();
-            GossipService.LOGGER.debug("Removed remote member " + remoteMember.getAddress()
-                    + " from dead list and added to local member list.");
-          } else {
-            GossipService.LOGGER.debug("me " + gossipManager.getMyself());
-            GossipService.LOGGER.debug("sender " + senderMember);
-            GossipService.LOGGER.debug("remote " + remoteList);
-            GossipService.LOGGER.debug("live " + gossipManager.getMemberList());
-            GossipService.LOGGER.debug("dead " + gossipManager.getDeadList());
-          }
-        } else {
-          GossipService.LOGGER.debug("me " + gossipManager.getMyself());
-          GossipService.LOGGER.debug("sender " + senderMember);
-          GossipService.LOGGER.debug("remote " + remoteList);
-          GossipService.LOGGER.debug("live " + gossipManager.getMemberList());
-          GossipService.LOGGER.debug("dead " + gossipManager.getDeadList());
-          // throw new IllegalArgumentException("wtf");
-        }
-      }
-    }
-  }
-
-}
-
-/**
- * old comment section: // If a member is restarted the heartbeat will restart from 1, so we should
- * check // that here. // So a member can become from the dead when it is either larger than a
- * previous // heartbeat (due to network failure) // or when the heartbeat is 1 (after a restart of
- * the service). // TODO: What if the first message of a gossip service is sent to a dead node? The
- * // second member will receive a heartbeat of two. // TODO: The above does happen. Maybe a special
- * message for a revived member? // TODO: Or maybe when a member is declared dead for more than //
- * _settings.getCleanupInterval() ms, reset the heartbeat to 0. // It will then accept a revived
- * member. // The above is now handle by checking whether the heartbeat differs //
- * _settings.getCleanupInterval(), it must be restarted.
- */
-
-/*
- * // The remote member is back from the dead. // Remove it from the dead list. //
- * gossipManager.getDeadList().remove(localDeadMember); // Add it as a new member and add it to the
- * member list.
- */
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-gossip/blob/968203e8/src/main/java/com/google/code/gossip/manager/impl/SendMembersActiveGossipThread.java
----------------------------------------------------------------------
diff --git a/src/main/java/com/google/code/gossip/manager/impl/SendMembersActiveGossipThread.java b/src/main/java/com/google/code/gossip/manager/impl/SendMembersActiveGossipThread.java
deleted file mode 100644
index 2259781..0000000
--- a/src/main/java/com/google/code/gossip/manager/impl/SendMembersActiveGossipThread.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.google.code.gossip.manager.impl;
-
-import java.io.IOException;
-import java.net.DatagramPacket;
-import java.net.DatagramSocket;
-import java.net.InetAddress;
-import java.nio.ByteBuffer;
-import java.util.List;
-
-import org.codehaus.jackson.map.ObjectMapper;
-
-import com.google.code.gossip.GossipService;
-import com.google.code.gossip.LocalGossipMember;
-import com.google.code.gossip.manager.ActiveGossipThread;
-import com.google.code.gossip.manager.GossipManager;
-import com.google.code.gossip.model.ActiveGossipMessage;
-import com.google.code.gossip.model.GossipMember;
-
-abstract public class SendMembersActiveGossipThread extends ActiveGossipThread {
-
-  protected ObjectMapper om = new ObjectMapper();
-  
-  public SendMembersActiveGossipThread(GossipManager gossipManager) {
-    super(gossipManager);
-  }
-
-  private GossipMember convert(LocalGossipMember member){
-    GossipMember gm = new GossipMember();
-    gm.setCluster(member.getClusterName());
-    gm.setHeartbeat(member.getHeartbeat());
-    gm.setHost(member.getHost());
-    gm.setId(member.getId());
-    gm.setPort(member.getPort());
-    return gm;
-  }
-  
-  /**
-   * Performs the sending of the membership list, after we have incremented our own heartbeat.
-   */
-  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) {
-      return;
-    }
-    try (DatagramSocket socket = new DatagramSocket()) {
-      socket.setSoTimeout(gossipManager.getSettings().getGossipInterval());
-      InetAddress dest = InetAddress.getByName(member.getHost());
-      ActiveGossipMessage message = new ActiveGossipMessage();
-      message.getMembers().add(convert(me));
-      for (LocalGossipMember other : memberList) {
-        message.getMembers().add(convert(other));
-      }
-      byte[] json_bytes = om.writeValueAsString(message).getBytes();
-      int packet_length = json_bytes.length;
-      if (packet_length < GossipManager.MAX_PACKET_SIZE) {
-        byte[] buf = createBuffer(packet_length, json_bytes);
-        DatagramPacket datagramPacket = new DatagramPacket(buf, buf.length, dest, member.getPort());
-        socket.send(datagramPacket);
-      } else {
-        GossipService.LOGGER.error("The length of the to be send message is too large ("
-                + packet_length + " > " + GossipManager.MAX_PACKET_SIZE + ").");
-      }
-    } catch (IOException e1) {
-      GossipService.LOGGER.warn(e1);
-    }
-  }
-
-  private byte[] createBuffer(int packetLength, byte[] jsonBytes) {
-    byte[] lengthBytes = new byte[4];
-    lengthBytes[0] = (byte) (packetLength >> 24);
-    lengthBytes[1] = (byte) ((packetLength << 8) >> 24);
-    lengthBytes[2] = (byte) ((packetLength << 16) >> 24);
-    lengthBytes[3] = (byte) ((packetLength << 24) >> 24);
-    ByteBuffer byteBuffer = ByteBuffer.allocate(4 + jsonBytes.length);
-    byteBuffer.put(lengthBytes);
-    byteBuffer.put(jsonBytes);
-    byte[] buf = byteBuffer.array();
-    return buf;
-  }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-gossip/blob/968203e8/src/main/java/com/google/code/gossip/manager/random/RandomActiveGossipThread.java
----------------------------------------------------------------------
diff --git a/src/main/java/com/google/code/gossip/manager/random/RandomActiveGossipThread.java b/src/main/java/com/google/code/gossip/manager/random/RandomActiveGossipThread.java
deleted file mode 100644
index 914f5ca..0000000
--- a/src/main/java/com/google/code/gossip/manager/random/RandomActiveGossipThread.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.google.code.gossip.manager.random;
-
-import java.util.List;
-import java.util.Random;
-
-import com.google.code.gossip.GossipService;
-import com.google.code.gossip.LocalGossipMember;
-import com.google.code.gossip.manager.GossipManager;
-import com.google.code.gossip.manager.impl.SendMembersActiveGossipThread;
-
-public class RandomActiveGossipThread extends SendMembersActiveGossipThread {
-
-  /** The Random used for choosing a member to gossip with. */
-  private final Random random;
-
-  public RandomActiveGossipThread(GossipManager gossipManager) {
-    super(gossipManager);
-    random = new Random();
-  }
-
-  /**
-   * [The selectToSend() function.] Find a random peer from the local membership list. In the case
-   * where this client is the only member in the list, this method will return null.
-   * 
-   * @return Member random member if list is greater than 1, null otherwise
-   */
-  protected LocalGossipMember selectPartner(List<LocalGossipMember> memberList) {
-    LocalGossipMember member = null;
-    if (memberList.size() > 0) {
-      int randomNeighborIndex = random.nextInt(memberList.size());
-      member = memberList.get(randomNeighborIndex);
-    } else {
-      GossipService.LOGGER.debug("I am alone in this world.");
-    }
-    return member;
-  }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-gossip/blob/968203e8/src/main/java/com/google/code/gossip/manager/random/RandomGossipManager.java
----------------------------------------------------------------------
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
deleted file mode 100644
index c1e69d6..0000000
--- a/src/main/java/com/google/code/gossip/manager/random/RandomGossipManager.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.google.code.gossip.manager.random;
-
-import com.google.code.gossip.GossipMember;
-import com.google.code.gossip.GossipSettings;
-import com.google.code.gossip.event.GossipListener;
-import com.google.code.gossip.manager.GossipManager;
-import com.google.code.gossip.manager.impl.OnlyProcessReceivedPassiveGossipThread;
-
-import java.util.List;
-
-public class RandomGossipManager extends GossipManager {
-  public RandomGossipManager(String cluster, String address, int port, String id,
-          GossipSettings settings, List<GossipMember> gossipMembers, GossipListener listener) {
-    super(OnlyProcessReceivedPassiveGossipThread.class, RandomActiveGossipThread.class, cluster,
-            address, port, id, settings, gossipMembers, listener);
-  }
-}

http://git-wip-us.apache.org/repos/asf/incubator-gossip/blob/968203e8/src/main/java/com/google/code/gossip/model/ActiveGossipMessage.java
----------------------------------------------------------------------
diff --git a/src/main/java/com/google/code/gossip/model/ActiveGossipMessage.java b/src/main/java/com/google/code/gossip/model/ActiveGossipMessage.java
deleted file mode 100644
index d3516f5..0000000
--- a/src/main/java/com/google/code/gossip/model/ActiveGossipMessage.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package com.google.code.gossip.model;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class ActiveGossipMessage {
-
-  private List<GossipMember> members = new ArrayList<>();
-  
-  public ActiveGossipMessage(){
-    
-  }
-
-  public List<GossipMember> getMembers() {
-    return members;
-  }
-
-  public void setMembers(List<GossipMember> members) {
-    this.members = members;
-  }
-  
-}

http://git-wip-us.apache.org/repos/asf/incubator-gossip/blob/968203e8/src/main/java/com/google/code/gossip/model/GossipMember.java
----------------------------------------------------------------------
diff --git a/src/main/java/com/google/code/gossip/model/GossipMember.java b/src/main/java/com/google/code/gossip/model/GossipMember.java
deleted file mode 100644
index 6c073b4..0000000
--- a/src/main/java/com/google/code/gossip/model/GossipMember.java
+++ /dev/null
@@ -1,63 +0,0 @@
-package com.google.code.gossip.model;
-
-public class GossipMember {
-
-  private String cluster;
-  private String host;
-  private Integer port;
-  private String id;
-  private Long heartbeat;
-  
-  public GossipMember(){
-    
-  }
-  
-  public GossipMember(String cluster, String host, Integer port, String id, Long heartbeat){
-    this.cluster=cluster;
-    this.host= host;
-    this.port = port;
-    this.id = id;
-    
-  }
-
-  public String getCluster() {
-    return cluster;
-  }
-
-  public void setCluster(String cluster) {
-    this.cluster = cluster;
-  }
-
-  public String getHost() {
-    return host;
-  }
-
-  public void setHost(String host) {
-    this.host = host;
-  }
-
-  public Integer getPort() {
-    return port;
-  }
-
-  public void setPort(Integer port) {
-    this.port = port;
-  }
-
-  public String getId() {
-    return id;
-  }
-
-  public void setId(String id) {
-    this.id = id;
-  }
-
-  public Long getHeartbeat() {
-    return heartbeat;
-  }
-
-  public void setHeartbeat(Long heartbeat) {
-    this.heartbeat = heartbeat;
-  }
-  
-}

http://git-wip-us.apache.org/repos/asf/incubator-gossip/blob/968203e8/src/main/java/org/apache/gossip/GossipMember.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/gossip/GossipMember.java b/src/main/java/org/apache/gossip/GossipMember.java
new file mode 100644
index 0000000..fd44ddd
--- /dev/null
+++ b/src/main/java/org/apache/gossip/GossipMember.java
@@ -0,0 +1,168 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.gossip;
+
+import java.net.InetSocketAddress;
+
+/**
+ * A abstract class representing a gossip member.
+ * 
+ * @author joshclemm, harmenw
+ */
+public abstract class GossipMember implements Comparable<GossipMember> {
+
+  
+  protected final String host;
+
+  protected final int port;
+
+  protected volatile long heartbeat;
+
+  protected final String clusterName;
+
+  /**
+   * The purpose of the id field is to be able for nodes to identify themselves beyond there
+   * host/port. For example an application might generate a persistent id so if they rejoin the
+   * cluster at a different host and port we are aware it is the same node.
+   */
+  protected String id;
+
+  /**
+   * Constructor.
+   * 
+   * @param host
+   *          The hostname or IP address.
+   * @param port
+   *          The port number.
+   * @param heartbeat
+   *          The current heartbeat.
+   * @param id
+   *          an id that may be replaced after contact
+   */
+  public GossipMember(String clusterName, String host, int port, String id, long heartbeat) {
+    this.clusterName = clusterName;
+    this.host = host;
+    this.port = port;
+    this.id = id;
+    this.heartbeat = heartbeat;
+  }
+
+  /**
+   * Get the name of the cluster the member belongs to.
+   * 
+   * @return The cluster name
+   */
+  public String getClusterName() {
+    return clusterName;
+  }
+
+  /**
+   * Get the hostname or IP address of the remote gossip member.
+   * 
+   * @return The hostname or IP address.
+   */
+  public String getHost() {
+    return host;
+  }
+
+  /**
+   * Get the port number of the remote gossip member.
+   * 
+   * @return The port number.
+   */
+  public int getPort() {
+    return port;
+  }
+
+  /**
+   * The member address in the form IP/host:port Similar to the toString in
+   * {@link InetSocketAddress}
+   */
+  public String getAddress() {
+    return host + ":" + port;
+  }
+
+  /**
+   * Get the heartbeat of this gossip member.
+   * 
+   * @return The current heartbeat.
+   */
+  public long getHeartbeat() {
+    return heartbeat;
+  }
+
+  /**
+   * Set the heartbeat of this gossip member.
+   * 
+   * @param heartbeat
+   *          The new heartbeat.
+   */
+  public void setHeartbeat(long heartbeat) {
+    this.heartbeat = heartbeat;
+  }
+
+  public String getId() {
+    return id;
+  }
+
+  public void setId(String _id) {
+    this.id = _id;
+  }
+
+  public String toString() {
+    return "Member [address=" + getAddress() + ", id=" + id + ", heartbeat=" + heartbeat + "]";
+  }
+
+  /**
+   * @see java.lang.Object#hashCode()
+   */
+  @Override
+  public int hashCode() {
+    final int prime = 31;
+    int result = 1;
+    String address = getAddress();
+    result = prime * result + ((address == null) ? 0 : address.hashCode()) + clusterName == null ? 0
+            : clusterName.hashCode();
+    return result;
+  }
+
+  /**
+   * @see java.lang.Object#equals(java.lang.Object)
+   */
+  @Override
+  public boolean equals(Object obj) {
+    if (this == obj) {
+      return true;
+    }
+    if (obj == null) {
+      System.err.println("equals(): obj is null.");
+      return false;
+    }
+    if (!(obj instanceof GossipMember)) {
+      System.err.println("equals(): obj is not of type GossipMember.");
+      return false;
+    }
+    // The object is the same of they both have the same address (hostname and port).
+    return getAddress().equals(((LocalGossipMember) obj).getAddress())
+            && getClusterName().equals(((LocalGossipMember) obj).getClusterName());
+  }
+
+  public int compareTo(GossipMember other) {
+    return this.getAddress().compareTo(other.getAddress());
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-gossip/blob/968203e8/src/main/java/org/apache/gossip/GossipRunner.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/gossip/GossipRunner.java b/src/main/java/org/apache/gossip/GossipRunner.java
new file mode 100644
index 0000000..d995cce
--- /dev/null
+++ b/src/main/java/org/apache/gossip/GossipRunner.java
@@ -0,0 +1,60 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.gossip;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+
+import org.json.JSONException;
+
+public class GossipRunner {
+
+  public static void main(String[] args) {
+    File configFile;
+    if (args.length == 1) {
+      configFile = new File("./" + args[0]);
+    } else {
+      configFile = new File("gossip.conf");
+    }
+    new GossipRunner(configFile);
+  }
+
+  public GossipRunner(File configFile) {
+    if (configFile != null && configFile.exists()) {
+      try {
+        System.out.println("Parsing the configuration file...");
+        StartupSettings _settings = StartupSettings.fromJSONFile(configFile);
+        GossipService gossipService = new GossipService(_settings);
+        System.out.println("Gossip service successfully initialized, let's start it...");
+        gossipService.start();
+      } catch (FileNotFoundException e) {
+        System.err.println("The given file is not found!");
+      } catch (JSONException e) {
+        System.err.println("The given file is not in the correct JSON format!");
+      } catch (IOException e) {
+        System.err.println("Could not read the configuration file: " + e.getMessage());
+      } catch (InterruptedException e) {
+        System.err.println("Error while starting the gossip service: " + e.getMessage());
+      }
+    } else {
+      System.out
+              .println("The gossip.conf file is not found.\n\nEither specify the path to the startup settings file or place the gossip.json file in the same folder as the JAR file.");
+    }
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-gossip/blob/968203e8/src/main/java/org/apache/gossip/GossipService.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/gossip/GossipService.java b/src/main/java/org/apache/gossip/GossipService.java
new file mode 100644
index 0000000..9db740e
--- /dev/null
+++ b/src/main/java/org/apache/gossip/GossipService.java
@@ -0,0 +1,86 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.gossip;
+
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+import java.util.List;
+
+import org.apache.gossip.event.GossipListener;
+import org.apache.gossip.manager.GossipManager;
+import org.apache.gossip.manager.random.RandomGossipManager;
+import org.apache.log4j.Logger;
+
+/**
+ * This object represents the service which is responsible for gossiping with other gossip members.
+ * 
+ * @author joshclemm, harmenw
+ */
+public class GossipService {
+
+  public static final Logger LOGGER = Logger.getLogger(GossipService.class);
+
+  private GossipManager gossipManager;
+
+  /**
+   * Constructor with the default settings.
+   * 
+   * @throws InterruptedException
+   * @throws UnknownHostException
+   */
+  public GossipService(StartupSettings startupSettings) throws InterruptedException,
+          UnknownHostException {
+    this(startupSettings.getCluster(), InetAddress.getLocalHost().getHostAddress(), startupSettings
+            .getPort(), startupSettings.getId(), startupSettings.getGossipMembers(),
+            startupSettings.getGossipSettings(), null);
+  }
+
+  /**
+   * Setup the client's lists, gossiping parameters, and parse the startup config file.
+   * 
+   * @throws InterruptedException
+   * @throws UnknownHostException
+   */
+  public GossipService(String cluster, String ipAddress, int port, String id,
+          List<GossipMember> gossipMembers, GossipSettings settings, GossipListener listener)
+          throws InterruptedException, UnknownHostException {
+    gossipManager = new RandomGossipManager(cluster, ipAddress, port, id, settings, gossipMembers,
+            listener);
+  }
+
+  public void start() {
+    String address = get_gossipManager().getMyself().getHost() + ":"
+            + get_gossipManager().getMyself().getPort();
+    LOGGER.debug("Starting: " + gossipManager.getName() + " - " + address);
+
+    gossipManager.start();
+  }
+
+  public void shutdown() {
+    gossipManager.shutdown();
+  }
+
+  public GossipManager get_gossipManager() {
+    return gossipManager;
+  }
+
+  public void set_gossipManager(GossipManager _gossipManager) {
+    this.gossipManager = _gossipManager;
+  }
+
+}