for (int i = 1; i < clusterMembers + 1; ++i) { URI uri = new URI("udp://" + "127.0.0.1" + ":" + (base + i)); GossipManager gossipService = GossipManagerBuilder.newBuilder().cluster(cluster).uri(uri) .id(i + "").gossipMembers(startupMembers).gossipSettings(settings).build(); clients.add(gossipService); gossipService.init();
x.put("rack", "rack1"); GossipManager gossipService1 = GossipManagerBuilder.newBuilder() .cluster("a") .uri(new URI("udp://" + "127.0.0.1" + ":" + (29000 + 0))) .id("0") .properties(x) .gossipMembers(startupMembers) .gossipSettings(settings).build(); gossipService1.init(); register(gossipService1); y.put("datacenter", "dc2"); y.put("rack", "rack2"); GossipManager gossipService2 = GossipManagerBuilder.newBuilder().cluster("a") .uri( new URI("udp://" + "127.0.0.1" + ":" + (29000 + 10))) .id("1") .properties(y) .gossipMembers(Arrays.asList(new RemoteMember("a", new URI("udp://" + "127.0.0.1" + ":" + (29000 + 0)), "0"))) .gossipSettings(settings).build(); gossipService2.init(); register(gossipService2);
URI uri = new URI("udp://" + "127.0.0.1" + ":" + (30300 + i)); GossipManager gossipService = GossipManagerBuilder.newBuilder() .cluster(cluster) .uri(uri) .id(i + "") .gossipMembers(startupMembers) .gossipSettings(settings) .build(); clients.add(gossipService); gossipService.init(); .gossipSettings(settings) .cluster(cluster) .uri(uri) .id(shutdownId+"") .gossipMembers(startupMembers) .build(); clients.add(gossipService); gossipService.init();
for (int i = 1; i < clusterMembers + 1; ++i) { URI uri = new URI("udp://" + "127.0.0.1" + ":" + (base + i)); GossipManager gossipService = GossipManagerBuilder.newBuilder().cluster(cluster).uri(uri) .id(i + "").gossipMembers(startupMembers).gossipSettings(settings).build(); clients.add(gossipService); gossipService.init();
for (int i = 1; i < clusterMembers + 1; ++i) { URI uri = new URI("udp://" + "127.0.0.1" + ":" + (base + i)); GossipManager gossipService = GossipManagerBuilder.newBuilder().cluster(cluster).uri(uri) .id(i + "").gossipMembers(startupMembers).gossipSettings(settings).build(); clients.add(gossipService); gossipService.init();
for (int i = 1; i < clusterMembers + 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(); clients.add(gossipService); gossipService.getLockManager().setNumberOfNodes(clusterMembers);
URI uri = new URI("udp://" + "127.0.0.1" + ":" + (base + i)); GossipManager gossipService = GossipManagerBuilder.newBuilder() .cluster(cluster) .uri(uri) .id(i + "") .gossipSettings(settings) .gossipMembers(startupMembers) .build(); gossipService.init(); clients.add(gossipService);
@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); }
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
@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(); }
@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(); }
@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(); } }
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); }
@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(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 useMemberListIfProvided() throws URISyntaxException { LocalMember member = new LocalMember( "aCluster", new URI("udp://localhost:2000"), "aGossipMember", System.nanoTime(), new HashMap<String, String>(), 1000, 1, "exponential"); List<Member> memberList = new ArrayList<>(); memberList.add(member); GossipManager gossipManager = builder .uri(new URI("udp://localhost:8000")) .gossipMembers(memberList).registry(new MetricRegistry()).build(); assertEquals(1, gossipManager.getDeadMembers().size()); assertEquals(member.getId(), gossipManager.getDeadMembers().get(0).getId()); }
@Test public void createDefaultMessageHandlerIfNull() throws URISyntaxException { GossipManager gossipManager = builder.messageHandler(null).registry(new MetricRegistry()).build(); assertNotNull(gossipManager.getMessageHandler()); }
private File aGossiperPersists(GossipSettings settings) throws UnknownHostException, InterruptedException, URISyntaxException { GossipManager gossipService = GossipManagerBuilder.newBuilder() .cluster("a") .uri(new URI("udp://" + "127.0.0.1" + ":" + (29000 + 1))) .id("1") .gossipSettings(settings) .gossipMembers( Arrays.asList( new RemoteMember("a", new URI("udp://" + "127.0.0.1" + ":" + (29000 + 0)), "0"), new RemoteMember("a", new URI("udp://" + "127.0.0.1" + ":" + (29000 + 2)), "2"))).build(); gossipService.getRingState().writeToDisk(); return GossipManager.buildRingStatePath(gossipService); }
@Test public void createMembersListIfNull() throws URISyntaxException { GossipManager gossipManager = builder.gossipMembers(null).registry(new MetricRegistry()).build(); assertNotNull(gossipManager.getLiveMembers()); }