private BroadcastGroup createBroadcastGroup(BroadcastGroupConfiguration config) throws Exception { BroadcastGroup group = broadcastGroups.get(config.getName()); if (group == null) { group = new BroadcastGroupImpl(nodeManager, config.getName(), config.getBroadcastPeriod(), scheduledExecutor, config.getEndpointFactory()); for (String connectorInfo : config.getConnectorInfos()) { TransportConfiguration connector = configuration.getConnectorConfigurations().get(connectorInfo); if (connector == null) { logWarnNoConnector(connectorInfo, config.getName()); return null; } group.addConnector(connector); } } if (group.size() == 0) { logWarnNoConnector(config.getConnectorInfos().toString(), group.getName()); return null; } broadcastGroups.put(config.getName(), group); return group; }
@Override public synchronized void registerBroadcastGroup(final BroadcastGroup broadcastGroup, final BroadcastGroupConfiguration configuration) throws Exception { broadcastGroup.setNotificationService(this); ObjectName objectName = objectNameBuilder.getBroadcastGroupObjectName(configuration.getName()); BroadcastGroupControl control = new BroadcastGroupControlImpl(broadcastGroup, storageManager, configuration); registerInJMX(objectName, control); registerInRegistry(ResourceNames.BROADCAST_GROUP + configuration.getName(), control); }
@Test public void testSimpleBroadcastDifferentAddressAndPort() throws Exception { final InetAddress groupAddress = InetAddress.getByName(address1); final int groupPort = getUDPDiscoveryPort(); final int timeout = 500; bg = newBroadcast(RandomUtil.randomString(), RandomUtil.randomString(), null, -1, groupAddress, groupPort); bg.start(); TransportConfiguration live1 = generateTC(); bg.addConnector(live1); final InetAddress groupAddress2 = InetAddress.getByName(address2); final int port2 = getUDPDiscoveryPort(1); dg = newDiscoveryGroup(RandomUtil.randomString(), RandomUtil.randomString(), null, groupAddress2, port2, timeout); dg.start(); verifyNonBroadcast(bg, dg); }
@Test public void testBroadcastGroupNotifications() throws Exception { SimpleNotificationService notifService = new SimpleNotificationService(); SimpleNotificationService.Listener notifListener = new SimpleNotificationService.Listener(); notifService.addNotificationListener(notifListener); final InetAddress groupAddress = InetAddress.getByName(address1); final int groupPort = getUDPDiscoveryPort(); bg = newBroadcast(RandomUtil.randomString(), RandomUtil.randomString(), null, -1, groupAddress, groupPort); bg.setNotificationService(notifService); Assert.assertEquals(0, notifListener.getNotifications().size()); bg.start(); Assert.assertEquals(1, notifListener.getNotifications().size()); Notification notif = notifListener.getNotifications().get(0); Assert.assertEquals(CoreNotificationType.BROADCAST_GROUP_STARTED, notif.getType()); Assert.assertEquals(bg.getName(), notif.getProperties().getSimpleStringProperty(new SimpleString("name")).toString()); bg.stop(); Assert.assertEquals(2, notifListener.getNotifications().size()); notif = notifListener.getNotifications().get(1); Assert.assertEquals(CoreNotificationType.BROADCAST_GROUP_STOPPED, notif.getType()); Assert.assertEquals(bg.getName(), notif.getProperties().getSimpleStringProperty(new SimpleString("name")).toString()); } }
bg.start(); bg.addConnector(live1); dg3.start(); bg.broadcastConnectors(); assertEqualsDiscoveryEntries(Arrays.asList(live1), entries); bg.stop();
@Test public void testSimpleBroadcastWithStopStartDiscoveryGroup() throws Exception { final InetAddress groupAddress = InetAddress.getByName(address1); final int groupPort = getUDPDiscoveryPort(); final int timeout = 500; final String nodeID = RandomUtil.randomString(); bg = newBroadcast(nodeID, RandomUtil.randomString(), null, -1, groupAddress, groupPort); bg.start(); TransportConfiguration live1 = generateTC(); bg.addConnector(live1); dg = newDiscoveryGroup(RandomUtil.randomString(), RandomUtil.randomString(), null, groupAddress, groupPort, timeout); dg.start(); verifyBroadcast(bg, dg); List<DiscoveryEntry> entries = dg.getDiscoveryEntries(); assertEqualsDiscoveryEntries(Arrays.asList(live1), entries); bg.stop(); dg.stop(); dg.start(); bg.start(); verifyBroadcast(bg, dg); entries = dg.getDiscoveryEntries(); assertEqualsDiscoveryEntries(Arrays.asList(live1), entries); }
bg1.start(); bg2.start(); bg3.start(); bg1.addConnector(live1); bg2.addConnector(live2); bg3.addConnector(live3); bg2.removeConnector(live2); verifyBroadcast(bg2, dg); bg1.broadcastConnectors(); boolean ok = dg.waitForBroadcast(1000); bg2.broadcastConnectors(); ok = dg.waitForBroadcast(1000); bg3.broadcastConnectors(); ok = dg.waitForBroadcast(1000); bg1.removeConnector(live1); bg3.removeConnector(live3); bg1.broadcastConnectors(); ok = dg.waitForBroadcast(1000); bg2.broadcastConnectors(); ok = dg.waitForBroadcast(1000);
bg2.start(); bg1.start(); bg3.start(); bg1.addConnector(live1); bg2.addConnector(live2); bg3.addConnector(live3); dg3.start(); bg1.broadcastConnectors(); bg2.broadcastConnectors(); bg3.broadcastConnectors();
@Override public void stop() throws Exception { clearIO(); try { broadcastGroup.stop(); } finally { blockOnIO(); } }
@Override public void start() throws Exception { clearIO(); try { broadcastGroup.start(); } finally { blockOnIO(); } }
/** * @param discoveryGroup * @throws Exception */ protected static void verifyNonBroadcast(BroadcastGroup broadcastGroup, DiscoveryGroup discoveryGroup) throws Exception { broadcastGroup.broadcastConnectors(); Assert.assertFalse("NO broadcast received", discoveryGroup.waitForBroadcast(2000)); }
@Override public boolean isStarted() { clearIO(); try { return broadcastGroup.isStarted(); } finally { blockOnIO(); } }
@Test public void testSimpleBroadcastSpecificNIC() throws Exception { final InetAddress groupAddress = InetAddress.getByName(address1); final int groupPort = getUDPDiscoveryPort(); final int timeout = 500; final String nodeID = RandomUtil.randomString(); // We need to choose a real NIC on the local machine - note this will silently pass if the machine // has no usable NIC! Enumeration<NetworkInterface> networkInterfaces = NetworkInterface.getNetworkInterfaces(); InetAddress localAddress = InetAddress.getLoopbackAddress(); log.info("Local address is " + localAddress); bg = newBroadcast(nodeID, RandomUtil.randomString(), localAddress, -1, groupAddress, groupPort); bg.start(); TransportConfiguration live1 = generateTC(); bg.addConnector(live1); dg = newDiscoveryGroup(RandomUtil.randomString(), RandomUtil.randomString(), localAddress, groupAddress, groupPort, timeout); dg.start(); verifyBroadcast(bg, dg); List<DiscoveryEntry> entries = dg.getDiscoveryEntries(); assertEqualsDiscoveryEntries(Arrays.asList(live1), entries); }
/** * @param discoveryGroup * @throws Exception */ protected static void verifyBroadcast(BroadcastGroup broadcastGroup, DiscoveryGroup discoveryGroup) throws Exception { broadcastGroup.broadcastConnectors(); Assert.assertTrue("broadcast not received", discoveryGroup.waitForBroadcast(2000)); }
@Test public void testIgnoreTrafficFromOwnNode() throws Exception { final InetAddress groupAddress = InetAddress.getByName(address1); final int groupPort = getUDPDiscoveryPort(); final int timeout = 500; String nodeID = RandomUtil.randomString(); bg = newBroadcast(nodeID, RandomUtil.randomString(), null, -1, groupAddress, groupPort); bg.start(); TransportConfiguration live1 = generateTC(); bg.addConnector(live1); dg = newDiscoveryGroup(nodeID, RandomUtil.randomString(), null, groupAddress, groupPort, timeout); dg.start(); verifyNonBroadcast(bg, dg); List<DiscoveryEntry> entries = dg.getDiscoveryEntries(); Assert.assertNotNull(entries); Assert.assertEquals(0, entries.size()); }
@Test public void testSimpleBroadcastDifferentPort() throws Exception { final InetAddress groupAddress = InetAddress.getByName(getUDPDiscoveryAddress()); final int groupPort = getUDPDiscoveryPort(); final int timeout = 500; bg = newBroadcast(RandomUtil.randomString(), RandomUtil.randomString(), null, -1, groupAddress, groupPort); bg.start(); TransportConfiguration live1 = generateTC(); bg.addConnector(live1); final int port2 = getUDPDiscoveryPort(1); dg = newDiscoveryGroup(RandomUtil.randomString(), RandomUtil.randomString(), null, groupAddress, port2, timeout); dg.start(); verifyNonBroadcast(bg, dg); }
@Test public void testSimpleBroadcast() throws Exception { final InetAddress groupAddress = InetAddress.getByName(address1); final int groupPort = getUDPDiscoveryPort(); final int timeout = 500; final String nodeID = RandomUtil.randomString(); bg = new BroadcastGroupImpl(new FakeNodeManager(nodeID), RandomUtil.randomString(), 0, null, new UDPBroadcastEndpointFactory().setGroupAddress(address1).setGroupPort(groupPort)); bg.start(); TransportConfiguration live1 = generateTC(); bg.addConnector(live1); dg = newDiscoveryGroup(RandomUtil.randomString(), RandomUtil.randomString(), null, groupAddress, groupPort, timeout); dg.start(); verifyBroadcast(bg, dg); List<DiscoveryEntry> entries = dg.getDiscoveryEntries(); assertEqualsDiscoveryEntries(Arrays.asList(live1), entries); }
@Test public void testSimpleBroadcastJGropus() throws Exception { final String nodeID = RandomUtil.randomString(); bg = new BroadcastGroupImpl(new FakeNodeManager(nodeID), "broadcast", 100, null, new JGroupsFileBroadcastEndpointFactory().setChannelName("tst").setFile(TEST_JGROUPS_CONF_FILE)); bg.start(); TransportConfiguration live1 = generateTC(); bg.addConnector(live1); dg = new DiscoveryGroup(nodeID + "1", "broadcast", 5000L, new JGroupsFileBroadcastEndpointFactory().setChannelName("tst").setFile(TEST_JGROUPS_CONF_FILE), null); dg.start(); verifyBroadcast(bg, dg); List<DiscoveryEntry> entries = dg.getDiscoveryEntries(); assertEqualsDiscoveryEntries(Arrays.asList(live1), entries); }