This commit is contained in:
Edward Capriolo
2017-01-03 14:59:21 -05:00
9 changed files with 45 additions and 38 deletions

13
pom.xml
View File

@ -38,7 +38,7 @@
<java.version>1.8</java.version> <java.version>1.8</java.version>
<!-- dependecy versions --> <!-- dependecy versions -->
<jackson-datatype-json-org.version>1.8.0</jackson-datatype-json-org.version> <jackson.version>2.8.5</jackson.version>
<junit.jupiter.version>5.0.0-M2</junit.jupiter.version> <junit.jupiter.version>5.0.0-M2</junit.jupiter.version>
<junit.platform.version>1.0.0-M2</junit.platform.version> <junit.platform.version>1.0.0-M2</junit.platform.version>
<junit.vintage.version>4.12.0-M2</junit.vintage.version> <junit.vintage.version>4.12.0-M2</junit.vintage.version>
@ -75,9 +75,14 @@
<dependencies> <dependencies>
<dependency> <dependency>
<groupId>com.fasterxml.jackson</groupId> <groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-datatype-json-org</artifactId> <artifactId>jackson-core</artifactId>
<version>${jackson-datatype-json-org.version}</version> <version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.junit.jupiter</groupId> <groupId>org.junit.jupiter</groupId>

View File

@ -22,7 +22,7 @@ import java.io.FileNotFoundException;
import java.io.IOException; import java.io.IOException;
import java.net.URISyntaxException; import java.net.URISyntaxException;
import org.json.JSONException;
public class GossipRunner { public class GossipRunner {
@ -46,8 +46,6 @@ public class GossipRunner {
gossipService.start(); gossipService.start();
} catch (FileNotFoundException e) { } catch (FileNotFoundException e) {
System.err.println("The given file is not found!"); 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) { } catch (IOException e) {
System.err.println("Could not read the configuration file: " + e.getMessage()); System.err.println("Could not read the configuration file: " + e.getMessage());
} catch (InterruptedException e) { } catch (InterruptedException e) {

View File

@ -25,17 +25,18 @@ import java.io.IOException;
import java.net.URI; import java.net.URI;
import java.net.URISyntaxException; import java.net.URISyntaxException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Iterator;
import java.util.List; import java.util.List;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject; import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
/** /**
* This object represents the settings used when starting the gossip service. * This object represents the settings used when starting the gossip service.
* *
* @author harmenw
*/ */
public class StartupSettings { public class StartupSettings {
private static final Logger log = Logger.getLogger(StartupSettings.class); private static final Logger log = Logger.getLogger(StartupSettings.class);
@ -160,7 +161,7 @@ public class StartupSettings {
* Thrown when reading the file gives problems. * Thrown when reading the file gives problems.
* @throws URISyntaxException * @throws URISyntaxException
*/ */
public static StartupSettings fromJSONFile(File jsonFile) throws JSONException, public static StartupSettings fromJSONFile(File jsonFile) throws
FileNotFoundException, IOException, URISyntaxException { FileNotFoundException, IOException, URISyntaxException {
// Read the file to a String. // Read the file to a String.
StringBuffer buffer = new StringBuffer(); StringBuffer buffer = new StringBuffer();
@ -170,31 +171,30 @@ public class StartupSettings {
buffer.append(line.trim()); buffer.append(line.trim());
} }
} }
ObjectMapper om = new ObjectMapper();
JSONObject jsonObject = new JSONArray(buffer.toString()).getJSONObject(0); JsonNode root = om.readTree(jsonFile);
String uri = jsonObject.getString("uri"); JsonNode jsonObject = root.get(0);
String id = jsonObject.getString("id"); String uri = jsonObject.get("uri").textValue();
int gossipInterval = jsonObject.getInt("gossip_interval"); String id = jsonObject.get("id").textValue();
int cleanupInterval = jsonObject.getInt("cleanup_interval"); int gossipInterval = jsonObject.get("gossip_interval").intValue();
String cluster = jsonObject.getString("cluster"); int cleanupInterval = jsonObject.get("cleanup_interval").intValue();
String cluster = jsonObject.get("cluster").textValue();
if (cluster == null){ if (cluster == null){
throw new IllegalArgumentException("cluster was null. It is required"); throw new IllegalArgumentException("cluster was null. It is required");
} }
URI uri2 = new URI(uri); URI uri2 = new URI(uri);
StartupSettings settings = new StartupSettings(id, uri2, new GossipSettings(gossipInterval, StartupSettings settings = new StartupSettings(id, uri2, new GossipSettings(gossipInterval,
cleanupInterval), cluster); cleanupInterval), cluster);
// Now iterate over the members from the config file and add them to the settings.
String configMembersDetails = "Config-members ["; String configMembersDetails = "Config-members [";
JSONArray membersJSON = jsonObject.getJSONArray("members"); JsonNode membersJSON = jsonObject.get("members");
for (int i = 0; i < membersJSON.length(); i++) { Iterator<JsonNode> it = membersJSON.iterator();
JSONObject memberJSON = membersJSON.getJSONObject(i); while (it.hasNext()){
URI uri3 = new URI(memberJSON.getString("uri")); JsonNode child = it.next();
RemoteGossipMember member = new RemoteGossipMember(memberJSON.getString("cluster"), URI uri3 = new URI(child.get("uri").textValue());
RemoteGossipMember member = new RemoteGossipMember(child.get("cluster").asText(),
uri3, "", 0); uri3, "", 0);
settings.addGossipMember(member); settings.addGossipMember(member);
configMembersDetails += member.getAddress(); configMembersDetails += member.getAddress();
if (i < (membersJSON.length() - 1))
configMembersDetails += ", "; configMembersDetails += ", ";
} }
log.info(configMembersDetails + "]"); log.info(configMembersDetails + "]");

View File

@ -39,7 +39,9 @@ import org.apache.gossip.udp.UdpActiveGossipMessage;
import org.apache.gossip.udp.UdpGossipDataMessage; import org.apache.gossip.udp.UdpGossipDataMessage;
import org.apache.gossip.udp.UdpSharedGossipDataMessage; import org.apache.gossip.udp.UdpSharedGossipDataMessage;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
import org.codehaus.jackson.map.ObjectMapper;
import com.fasterxml.jackson.databind.ObjectMapper;
/** /**
* [The active thread: periodically send gossip request.] The class handles gossiping the membership * [The active thread: periodically send gossip request.] The class handles gossiping the membership

View File

@ -31,7 +31,6 @@ import java.util.concurrent.Callable;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService; import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future; import java.util.concurrent.Future;
import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.ThreadPoolExecutor.DiscardPolicy; import java.util.concurrent.ThreadPoolExecutor.DiscardPolicy;
@ -52,7 +51,9 @@ import org.apache.gossip.udp.UdpGossipDataMessage;
import org.apache.gossip.udp.UdpNotAMemberFault; import org.apache.gossip.udp.UdpNotAMemberFault;
import org.apache.gossip.udp.UdpSharedGossipDataMessage; import org.apache.gossip.udp.UdpSharedGossipDataMessage;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
import org.codehaus.jackson.map.ObjectMapper;
import com.fasterxml.jackson.databind.ObjectMapper;
public class GossipCore { public class GossipCore {

View File

@ -27,7 +27,8 @@ import java.util.concurrent.atomic.AtomicBoolean;
import org.apache.gossip.model.Base; import org.apache.gossip.model.Base;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
import org.codehaus.jackson.map.ObjectMapper;
import com.fasterxml.jackson.databind.ObjectMapper;
/** /**
* [The passive thread: reply to incoming gossip request.] This class handles the passive cycle, * [The passive thread: reply to incoming gossip request.] This class handles the passive cycle,

View File

@ -21,7 +21,6 @@ import org.apache.gossip.GossipMember;
import org.apache.gossip.GossipSettings; import org.apache.gossip.GossipSettings;
import org.apache.gossip.event.GossipListener; import org.apache.gossip.event.GossipListener;
import org.apache.gossip.manager.GossipManager; import org.apache.gossip.manager.GossipManager;
import org.apache.gossip.manager.impl.OnlyProcessReceivedPassiveGossipThread;
import java.net.URI; import java.net.URI;
import java.util.List; import java.util.List;

View File

@ -22,9 +22,11 @@ import org.apache.gossip.udp.UdpActiveGossipOk;
import org.apache.gossip.udp.UdpGossipDataMessage; import org.apache.gossip.udp.UdpGossipDataMessage;
import org.apache.gossip.udp.UdpNotAMemberFault; import org.apache.gossip.udp.UdpNotAMemberFault;
import org.apache.gossip.udp.UdpSharedGossipDataMessage; import org.apache.gossip.udp.UdpSharedGossipDataMessage;
import org.codehaus.jackson.annotate.JsonSubTypes;
import org.codehaus.jackson.annotate.JsonSubTypes.Type; import com.fasterxml.jackson.annotation.JsonTypeInfo;
import org.codehaus.jackson.annotate.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonSubTypes;
import com.fasterxml.jackson.annotation.JsonSubTypes.Type;
@JsonTypeInfo( @JsonTypeInfo(
use = JsonTypeInfo.Id.CLASS, use = JsonTypeInfo.Id.CLASS,

View File

@ -18,7 +18,6 @@
package org.apache.gossip; package org.apache.gossip;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
import org.json.JSONException;
import io.teknek.tunit.TUnit; import io.teknek.tunit.TUnit;
@ -47,7 +46,7 @@ public class StartupSettingsTest {
@Test @Test
public void testUsingSettingsFile() throws IOException, InterruptedException, JSONException, URISyntaxException { public void testUsingSettingsFile() throws IOException, InterruptedException, URISyntaxException {
File settingsFile = File.createTempFile("gossipTest",".json"); File settingsFile = File.createTempFile("gossipTest",".json");
log.debug( "Using settings file: " + settingsFile.getAbsolutePath() ); log.debug( "Using settings file: " + settingsFile.getAbsolutePath() );
settingsFile.deleteOnExit(); settingsFile.deleteOnExit();