void exec(boolean willRead) throws IOException { gossipService.init(); startMonitorLoop(gossipService); if (willRead) { startBlockingReadLoop(); } }
void initGossipManager(String[] args) { GossipSettings s = new GossipSettings(); s.setWindowSize(1000); s.setGossipInterval(100); s.setActiveGossipClass(DatacenterRackAwareActiveGossiper.class.getName()); Map<String, String> gossipProps = new HashMap<>(); gossipProps.put("sameRackGossipIntervalMs", "2000"); gossipProps.put("differentDatacenterGossipIntervalMs", "10000"); s.setActiveGossipProperties(gossipProps); Map<String, String> props = new HashMap<>(); props.put(DatacenterRackAwareActiveGossiper.DATACENTER, args[4]); props.put(DatacenterRackAwareActiveGossiper.RACK, args[5]); GossipManager manager = GossipManagerBuilder.newBuilder().cluster("mycluster") .uri(URI.create(args[0])).id(args[1]).gossipSettings(s) .gossipMembers( Arrays.asList(new RemoteMember("mycluster", URI.create(args[2]), args[3]))) .properties(props).build(); manager.init(); setGossipService(manager); }
private void createDcNode(URI uri, String id, GossipSettings settings, RemoteMember seeder, String cluster, String dataCenter, String rack){ Map<String, String> props = new HashMap<>(); props.put(DatacenterRackAwareActiveGossiper.DATACENTER, dataCenter); props.put(DatacenterRackAwareActiveGossiper.RACK, rack); GossipManager dcNode = GossipManagerBuilder.newBuilder().cluster(cluster).uri(uri).id(id) .gossipSettings(settings).gossipMembers(Arrays.asList(seeder)).properties(props) .build(); dcNode.init(); register(dcNode); }
private void createDcNode(URI uri, String id, GossipSettings settings, RemoteMember seeder, String cluster, String dataCenter, String rack){ Map<String, String> props = new HashMap<>(); props.put(DatacenterRackAwareActiveGossiper.DATACENTER, dataCenter); props.put(DatacenterRackAwareActiveGossiper.RACK, rack); GossipManager dcNode = GossipManagerBuilder.newBuilder().cluster(cluster).uri(uri).id(id) .gossipSettings(settings).gossipMembers(Arrays.asList(seeder)).properties(props) .build(); dcNode.init(); register(dcNode); }
public void generateStandardNodes(final int memberCount) throws URISyntaxException { if(nodes.size() > 0){ after(); nodes.clear(); } GossipSettings settings = new GossipSettings(); settings.setPersistRingState(false); settings.setPersistDataState(false); String cluster = UUID.randomUUID().toString(); int seedNodes = 1; List<Member> startupMembers = new ArrayList<>(); for (int i = 1; i < seedNodes + 1; ++i) { URI uri = new URI("udp://" + "127.0.0.1" + ":" + (50000 + i)); startupMembers.add(new RemoteMember(cluster, uri, i + "")); } for (int i = 1; i < memberCount + 1; ++i) { URI uri = new URI("udp://" + "127.0.0.1" + ":" + (50000 + i)); GossipManager gossipService = GossipManagerBuilder.newBuilder().cluster(cluster).uri(uri) .id(i + "").gossipMembers(startupMembers).gossipSettings(settings).build(); gossipService.init(); register(gossipService); } } @Before
clients.add(gossipService); gossipService.getLockManager().setNumberOfNodes(clusterMembers); gossipService.init(); register(gossipService);
@Test(expected = IllegalArgumentException.class) public void ifSignMustHaveKeys() throws URISyntaxException, UnknownHostException, InterruptedException { String cluster = UUID.randomUUID().toString(); GossipSettings settings = withSigning(simpleSettings(new GossipSettings())); List<Member> startupMembers = new ArrayList<>(); URI uri = new URI("udp://" + "127.0.0.1" + ":" + (30000 + 1)); GossipManager gossipService = GossipManagerBuilder.newBuilder() .cluster(cluster) .uri(uri) .id(1 + "") .gossipMembers(startupMembers) .gossipSettings(settings) .build(); gossipService.init(); }
@Test public void dataTest() throws InterruptedException, URISyntaxException, NoSuchAlgorithmException, NoSuchProviderException, IOException { final String keys = System.getProperty("java.io.tmpdir") + "/keys"; GossipSettings settings = gossiperThatSigns(keys); setup(keys); String cluster = UUID.randomUUID().toString(); List<Member> startupMembers = new ArrayList<>(); for (int i = 1; i < 2; ++i) { URI uri = new URI("udp://" + "127.0.0.1" + ":" + (30000 + i)); startupMembers.add(new RemoteMember(cluster, uri, i + "")); } final List<GossipManager> clients = new ArrayList<>(); for (int i = 1; i < 3; ++i) { URI uri = new URI("udp://" + "127.0.0.1" + ":" + (30000 + i)); GossipManager gossipService = GossipManagerBuilder.newBuilder() .cluster(cluster) .uri(uri) .id(i + "") .gossipMembers(startupMembers) .gossipSettings(settings) .build(); gossipService.init(); clients.add(gossipService); } assertTwoAlive(clients); assertOnlySignedMessages(clients); cleanup(keys, clients); }
@BeforeClass public static void initializeMembers() throws InterruptedException, UnknownHostException, URISyntaxException{ final int clusterMembers = 2; GossipSettings settings = new GossipSettings(); settings.setPersistRingState(false); settings.setPersistDataState(false); String cluster = UUID.randomUUID().toString(); List<Member> startupMembers = new ArrayList<>(); for (int i = 0; i < clusterMembers; ++i){ int id = i + 1; URI uri = new URI("udp://" + "127.0.0.1" + ":" + (50000 + id)); startupMembers.add(new RemoteMember(cluster, uri, id + "")); } for (Member member : startupMembers){ GossipManager gossipService = GossipManagerBuilder.newBuilder().cluster(cluster).uri(member.getUri()) .id(member.getId()).gossipMembers(startupMembers).gossipSettings(settings).build(); clients.add(gossipService); gossipService.init(); } }
.gossipMembers(startupMembers) .build(); gossipService.init(); clients.add(gossipService);
@Test public void testUsingSettingsFile() throws IOException, InterruptedException, URISyntaxException { File settingsFile = File.createTempFile("gossipTest",".json"); settingsFile.deleteOnExit(); writeSettingsFile(settingsFile); URI uri = new URI("udp://" + "127.0.0.1" + ":" + 50000); GossipSettings firstGossipSettings = new GossipSettings(); firstGossipSettings.setTransportManagerClass("org.apache.gossip.transport.UnitTestTransportManager"); firstGossipSettings.setProtocolManagerClass("org.apache.gossip.protocol.UnitTestProtocolManager"); GossipManager firstService = GossipManagerBuilder.newBuilder() .cluster(CLUSTER) .uri(uri) .id("1") .gossipSettings(firstGossipSettings).build(); firstService.init(); GossipManager manager = GossipManagerBuilder.newBuilder() .startupSettings(StartupSettings.fromJSONFile(settingsFile)).build(); manager.init(); firstService.shutdown(); manager.shutdown(); }
.id(i + "").gossipMembers(startupMembers).gossipSettings(settings).build(); clients.add(gossipService); gossipService.init(); register(gossipService);
.id(i + "").gossipMembers(startupMembers).gossipSettings(settings).build(); clients.add(gossipService); gossipService.init(); register(gossipService);
.id(i + "").gossipMembers(startupMembers).gossipSettings(settings).build(); clients.add(gossipService); gossipService.init(); register(gossipService);
gossipService.init(); gossipService.gossipPerNodeData(getToothpick()); gossipService.gossipSharedData(getAnotherToothpick()); gossipService.init(); Assert.assertEquals("red", ((AToothpick) gossipService.findPerNodeGossipData(nodeId, "a").getPayload()).getColor()); Assert.assertEquals("blue", ((AToothpick) gossipService.findSharedGossipData("a").getPayload()).getColor());
@Test public void testReaperOneShot() { GossipSettings settings = new GossipSettings(); settings.setPersistRingState(false); settings.setPersistDataState(false); settings.setTransportManagerClass("org.apache.gossip.transport.UnitTestTransportManager"); settings.setProtocolManagerClass("org.apache.gossip.protocol.UnitTestProtocolManager"); GossipManager gm = GossipManagerBuilder.newBuilder().cluster("abc").gossipSettings(settings) .id(myId).uri(URI.create("udp://localhost:6000")).registry(registry).build(); gm.init(); gm.gossipPerNodeData(perNodeDatum(key, value)); gm.gossipSharedData(sharedDatum(key, value)); assertDataIsAtCorrectValue(gm); gm.getDataReaper().runPerNodeOnce(); gm.getDataReaper().runSharedOnce(); assertDataIsRemoved(gm); gm.shutdown(); }
@Test public void testHigherTimestampWins() { String myId = "4"; String key = "key"; String value = "a"; GossipSettings settings = new GossipSettings(); settings.setTransportManagerClass("org.apache.gossip.transport.UnitTestTransportManager"); settings.setProtocolManagerClass("org.apache.gossip.protocol.UnitTestProtocolManager"); GossipManager gm = GossipManagerBuilder.newBuilder().cluster("abc").gossipSettings(settings) .id(myId).uri(URI.create("udp://localhost:7000")).registry(registry).build(); gm.init(); PerNodeDataMessage before = perNodeDatum(key, value); PerNodeDataMessage after = perNodeDatum(key, "b"); after.setTimestamp(after.getTimestamp() - 1); gm.gossipPerNodeData(before); Assert.assertEquals(value, gm.findPerNodeGossipData(myId, key).getPayload()); gm.gossipPerNodeData(after); Assert.assertEquals(value, gm.findPerNodeGossipData(myId, key).getPayload()); gm.shutdown(); }