Search in sources :

Example 1 with LOADBALANCE_BROKERS_ROOT

use of org.apache.pulsar.discovery.service.web.ZookeeperCacheLoader.LOADBALANCE_BROKERS_ROOT in project incubator-pulsar by apache.

the class ZookeeperCacheLoaderTest method testZookeeperCacheLoader.

/**
 * Create znode for available broker in ZooKeeper and updates it again to verify ZooKeeper cache update
 *
 * @throws InterruptedException
 * @throws KeeperException
 * @throws IOException
 */
@Test
public void testZookeeperCacheLoader() throws InterruptedException, KeeperException, Exception {
    DiscoveryZooKeeperClientFactoryImpl.zk = mockZookKeeper;
    @SuppressWarnings("resource") ZookeeperCacheLoader zkLoader = new ZookeeperCacheLoader(new DiscoveryZooKeeperClientFactoryImpl(), "", 30_000);
    List<String> brokers = Lists.newArrayList("broker-1:15000", "broker-2:15000", "broker-3:15000");
    for (int i = 0; i < brokers.size(); i++) {
        try {
            LoadManagerReport report = i % 2 == 0 ? getSimpleLoadManagerLoadReport(brokers.get(i)) : getModularLoadManagerLoadReport(brokers.get(i));
            zkLoader.getLocalZkCache().getZooKeeper().create(LOADBALANCE_BROKERS_ROOT + "/" + brokers.get(i), ObjectMapperFactory.getThreadLocal().writeValueAsBytes(report), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
        } catch (Exception e) {
            fail("failed while creating broker znodes");
        }
    }
    // strategically wait for cache to get sync
    for (int i = 0; i < 5; i++) {
        if (zkLoader.getAvailableBrokers().size() == 3 || i == 4) {
            break;
        }
        Thread.sleep(1000);
    }
    // 2. get available brokers from ZookeeperCacheLoader
    List<LoadManagerReport> list = zkLoader.getAvailableBrokers();
    // 3. verify retrieved broker list
    Set<String> cachedBrokers = list.stream().map(loadReport -> loadReport.getWebServiceUrl()).collect(Collectors.toSet());
    Assert.assertEquals(list.size(), brokers.size());
    Assert.assertTrue(brokers.containsAll(cachedBrokers));
    // 4.a add new broker
    final String newBroker = "broker-4:15000";
    LoadManagerReport report = getSimpleLoadManagerLoadReport(newBroker);
    zkLoader.getLocalZkCache().getZooKeeper().create(LOADBALANCE_BROKERS_ROOT + "/" + newBroker, ObjectMapperFactory.getThreadLocal().writeValueAsBytes(report), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
    brokers.add(newBroker);
    // wait for 100 msec: to get cache updated
    Thread.sleep(100);
    // 4.b. get available brokers from ZookeeperCacheLoader
    list = zkLoader.getAvailableBrokers();
    // 4.c. verify retrieved broker list
    cachedBrokers = list.stream().map(loadReport -> loadReport.getWebServiceUrl()).collect(Collectors.toSet());
    Assert.assertEquals(list.size(), brokers.size());
    Assert.assertTrue(brokers.containsAll(cachedBrokers));
}
Also used : LoadManagerReport(org.apache.pulsar.policies.data.loadbalancer.LoadManagerReport) CreateMode(org.apache.zookeeper.CreateMode) LOADBALANCE_BROKERS_ROOT(org.apache.pulsar.discovery.service.web.ZookeeperCacheLoader.LOADBALANCE_BROKERS_ROOT) KeeperException(org.apache.zookeeper.KeeperException) LocalBrokerData(org.apache.pulsar.policies.data.loadbalancer.LocalBrokerData) Assert.fail(org.testng.Assert.fail) ObjectMapperFactory(org.apache.pulsar.common.util.ObjectMapperFactory) BeforeMethod(org.testng.annotations.BeforeMethod) Set(java.util.Set) IOException(java.io.IOException) Test(org.testng.annotations.Test) LoadReport(org.apache.pulsar.policies.data.loadbalancer.LoadReport) AfterMethod(org.testng.annotations.AfterMethod) Collectors(java.util.stream.Collectors) Sets(com.google.common.collect.Sets) List(java.util.List) Lists(com.google.common.collect.Lists) ZooDefs(org.apache.zookeeper.ZooDefs) Assert(org.testng.Assert) LoadManagerReport(org.apache.pulsar.policies.data.loadbalancer.LoadManagerReport) KeeperException(org.apache.zookeeper.KeeperException) IOException(java.io.IOException) Test(org.testng.annotations.Test)

Aggregations

Lists (com.google.common.collect.Lists)1 Sets (com.google.common.collect.Sets)1 IOException (java.io.IOException)1 List (java.util.List)1 Set (java.util.Set)1 Collectors (java.util.stream.Collectors)1 ObjectMapperFactory (org.apache.pulsar.common.util.ObjectMapperFactory)1 LOADBALANCE_BROKERS_ROOT (org.apache.pulsar.discovery.service.web.ZookeeperCacheLoader.LOADBALANCE_BROKERS_ROOT)1 LoadManagerReport (org.apache.pulsar.policies.data.loadbalancer.LoadManagerReport)1 LoadReport (org.apache.pulsar.policies.data.loadbalancer.LoadReport)1 LocalBrokerData (org.apache.pulsar.policies.data.loadbalancer.LocalBrokerData)1 CreateMode (org.apache.zookeeper.CreateMode)1 KeeperException (org.apache.zookeeper.KeeperException)1 ZooDefs (org.apache.zookeeper.ZooDefs)1 Assert (org.testng.Assert)1 Assert.fail (org.testng.Assert.fail)1 AfterMethod (org.testng.annotations.AfterMethod)1 BeforeMethod (org.testng.annotations.BeforeMethod)1 Test (org.testng.annotations.Test)1