Search in sources :

Example 1 with RegionServerTracker

use of org.apache.hadoop.hbase.zookeeper.RegionServerTracker in project hbase by apache.

the class HMaster method initializeZKBasedSystemTrackers.

/**
   * Initialize all ZK based system trackers.
   */
void initializeZKBasedSystemTrackers() throws IOException, InterruptedException, KeeperException, CoordinatedStateException {
    this.balancer = LoadBalancerFactory.getLoadBalancer(conf);
    this.normalizer = RegionNormalizerFactory.getRegionNormalizer(conf);
    this.normalizer.setMasterServices(this);
    this.normalizer.setMasterRpcServices((MasterRpcServices) rpcServices);
    this.loadBalancerTracker = new LoadBalancerTracker(zooKeeper, this);
    this.loadBalancerTracker.start();
    this.regionNormalizerTracker = new RegionNormalizerTracker(zooKeeper, this);
    this.regionNormalizerTracker.start();
    this.splitOrMergeTracker = new SplitOrMergeTracker(zooKeeper, conf, this);
    this.splitOrMergeTracker.start();
    this.assignmentManager = new AssignmentManager(this, serverManager, this.balancer, this.service, this.metricsMaster, tableStateManager);
    this.replicationManager = new ReplicationManager(conf, zooKeeper, this);
    this.regionServerTracker = new RegionServerTracker(zooKeeper, this, this.serverManager);
    this.regionServerTracker.start();
    this.drainingServerTracker = new DrainingServerTracker(zooKeeper, this, this.serverManager);
    this.drainingServerTracker.start();
    this.maintenanceModeTracker = new MasterMaintenanceModeTracker(zooKeeper);
    this.maintenanceModeTracker.start();
    // Set the cluster as up.  If new RSs, they'll be waiting on this before
    // going ahead with their startup.
    boolean wasUp = this.clusterStatusTracker.isClusterUp();
    if (!wasUp)
        this.clusterStatusTracker.setClusterUp();
    LOG.info("Server active/primary master=" + this.serverName + ", sessionid=0x" + Long.toHexString(this.zooKeeper.getRecoverableZooKeeper().getSessionId()) + ", setting cluster-up flag (Was=" + wasUp + ")");
    // create/initialize the snapshot manager and other procedure managers
    this.snapshotManager = new SnapshotManager();
    this.mpmHost = new MasterProcedureManagerHost();
    this.mpmHost.register(this.snapshotManager);
    this.mpmHost.register(new MasterFlushTableProcedureManager());
    this.mpmHost.loadProcedures(conf);
    this.mpmHost.initialize(this, this.metricsMaster);
}
Also used : MasterFlushTableProcedureManager(org.apache.hadoop.hbase.procedure.flush.MasterFlushTableProcedureManager) ReplicationManager(org.apache.hadoop.hbase.master.replication.ReplicationManager) MasterProcedureManagerHost(org.apache.hadoop.hbase.procedure.MasterProcedureManagerHost) LoadBalancerTracker(org.apache.hadoop.hbase.zookeeper.LoadBalancerTracker) DrainingServerTracker(org.apache.hadoop.hbase.zookeeper.DrainingServerTracker) RegionNormalizerTracker(org.apache.hadoop.hbase.zookeeper.RegionNormalizerTracker) SplitOrMergeTracker(org.apache.hadoop.hbase.zookeeper.SplitOrMergeTracker) MasterMaintenanceModeTracker(org.apache.hadoop.hbase.zookeeper.MasterMaintenanceModeTracker) RegionServerTracker(org.apache.hadoop.hbase.zookeeper.RegionServerTracker) SnapshotManager(org.apache.hadoop.hbase.master.snapshot.SnapshotManager)

Example 2 with RegionServerTracker

use of org.apache.hadoop.hbase.zookeeper.RegionServerTracker in project hbase by apache.

the class TestAssignmentListener method testAddNewServerThatExistsInDraining.

@Test
public void testAddNewServerThatExistsInDraining() throws Exception {
    // Under certain circumstances, such as when we failover to the Backup
    // HMaster, the DrainingServerTracker is started with existing servers in
    // draining before all of the Region Servers register with the
    // ServerManager as "online".  This test is to ensure that Region Servers
    // are properly added to the ServerManager.drainingServers when they
    // register with the ServerManager under these circumstances.
    Configuration conf = TEST_UTIL.getConfiguration();
    ZooKeeperWatcher zooKeeper = new ZooKeeperWatcher(conf, "zkWatcher-NewServerDrainTest", abortable, true);
    String baseZNode = conf.get(HConstants.ZOOKEEPER_ZNODE_PARENT, HConstants.DEFAULT_ZOOKEEPER_ZNODE_PARENT);
    String drainingZNode = ZKUtil.joinZNode(baseZNode, conf.get("zookeeper.znode.draining.rs", "draining"));
    HMaster master = Mockito.mock(HMaster.class);
    Mockito.when(master.getConfiguration()).thenReturn(conf);
    ServerName SERVERNAME_A = ServerName.valueOf("mockserverbulk_a.org", 1000, 8000);
    ServerName SERVERNAME_B = ServerName.valueOf("mockserverbulk_b.org", 1001, 8000);
    ServerName SERVERNAME_C = ServerName.valueOf("mockserverbulk_c.org", 1002, 8000);
    // We'll start with 2 servers in draining that existed before the
    // HMaster started.
    ArrayList<ServerName> drainingServers = new ArrayList<>();
    drainingServers.add(SERVERNAME_A);
    drainingServers.add(SERVERNAME_B);
    // We'll have 2 servers that come online AFTER the DrainingServerTracker
    // is started (just as we see when we failover to the Backup HMaster).
    // One of these will already be a draining server.
    HashMap<ServerName, ServerLoad> onlineServers = new HashMap<>();
    onlineServers.put(SERVERNAME_A, ServerLoad.EMPTY_SERVERLOAD);
    onlineServers.put(SERVERNAME_C, ServerLoad.EMPTY_SERVERLOAD);
    // performed when the previous HMaster was running.
    for (ServerName sn : drainingServers) {
        String znode = ZKUtil.joinZNode(drainingZNode, sn.getServerName());
        ZKUtil.createAndFailSilent(zooKeeper, znode);
    }
    // Now, we follow the same order of steps that the HMaster does to setup
    // the ServerManager, RegionServerTracker, and DrainingServerTracker.
    ServerManager serverManager = new ServerManager(master);
    RegionServerTracker regionServerTracker = new RegionServerTracker(zooKeeper, master, serverManager);
    regionServerTracker.start();
    DrainingServerTracker drainingServerTracker = new DrainingServerTracker(zooKeeper, master, serverManager);
    drainingServerTracker.start();
    // Confirm our ServerManager lists are empty.
    Assert.assertEquals(serverManager.getOnlineServers(), new HashMap<ServerName, ServerLoad>());
    Assert.assertEquals(serverManager.getDrainingServersList(), new ArrayList<ServerName>());
    // checkAndRecordNewServer() is how servers are added to the ServerManager.
    ArrayList<ServerName> onlineDrainingServers = new ArrayList<>();
    for (ServerName sn : onlineServers.keySet()) {
        // Here's the actual test.
        serverManager.checkAndRecordNewServer(sn, onlineServers.get(sn));
        if (drainingServers.contains(sn)) {
            // keeping track for later verification
            onlineDrainingServers.add(sn);
        }
    }
    // Verify the ServerManager lists are correctly updated.
    Assert.assertEquals(serverManager.getOnlineServers(), onlineServers);
    Assert.assertEquals(serverManager.getDrainingServersList(), onlineDrainingServers);
}
Also used : Configuration(org.apache.hadoop.conf.Configuration) HashMap(java.util.HashMap) DrainingServerTracker(org.apache.hadoop.hbase.zookeeper.DrainingServerTracker) ArrayList(java.util.ArrayList) ServerLoad(org.apache.hadoop.hbase.ServerLoad) ZooKeeperWatcher(org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher) ServerName(org.apache.hadoop.hbase.ServerName) RegionServerTracker(org.apache.hadoop.hbase.zookeeper.RegionServerTracker) Test(org.junit.Test)

Aggregations

DrainingServerTracker (org.apache.hadoop.hbase.zookeeper.DrainingServerTracker)2 RegionServerTracker (org.apache.hadoop.hbase.zookeeper.RegionServerTracker)2 ArrayList (java.util.ArrayList)1 HashMap (java.util.HashMap)1 Configuration (org.apache.hadoop.conf.Configuration)1 ServerLoad (org.apache.hadoop.hbase.ServerLoad)1 ServerName (org.apache.hadoop.hbase.ServerName)1 ReplicationManager (org.apache.hadoop.hbase.master.replication.ReplicationManager)1 SnapshotManager (org.apache.hadoop.hbase.master.snapshot.SnapshotManager)1 MasterProcedureManagerHost (org.apache.hadoop.hbase.procedure.MasterProcedureManagerHost)1 MasterFlushTableProcedureManager (org.apache.hadoop.hbase.procedure.flush.MasterFlushTableProcedureManager)1 LoadBalancerTracker (org.apache.hadoop.hbase.zookeeper.LoadBalancerTracker)1 MasterMaintenanceModeTracker (org.apache.hadoop.hbase.zookeeper.MasterMaintenanceModeTracker)1 RegionNormalizerTracker (org.apache.hadoop.hbase.zookeeper.RegionNormalizerTracker)1 SplitOrMergeTracker (org.apache.hadoop.hbase.zookeeper.SplitOrMergeTracker)1 ZooKeeperWatcher (org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher)1 Test (org.junit.Test)1