Java 类org.apache.hadoop.hbase.master.BulkAssigner 实例源码

项目:ditb    文件:EnableTableHandler.java   
private void handleEnableTable() throws IOException, CoordinatedStateException,
    InterruptedException {
  // I could check table is disabling and if so, not enable but require
  // that user first finish disabling but that might be obnoxious.

  // Set table enabling flag up in zk.
  this.assignmentManager.getTableStateManager().setTableState(this.tableName,
    ZooKeeperProtos.Table.State.ENABLING);
  boolean done = false;
  ServerManager serverManager = ((HMaster)this.server).getServerManager();
  // Get the regions of this table. We're done when all listed
  // tables are onlined.
  List<Pair<HRegionInfo, ServerName>> tableRegionsAndLocations;
  if (TableName.META_TABLE_NAME.equals(tableName)) {
    tableRegionsAndLocations = new MetaTableLocator().getMetaRegionsAndLocations(
      server.getZooKeeper());
  } else {
    tableRegionsAndLocations = MetaTableAccessor.getTableRegionsAndLocations(
      server.getZooKeeper(), server.getConnection(), tableName, true);
  }

  int countOfRegionsInTable = tableRegionsAndLocations.size();
  Map<HRegionInfo, ServerName> regionsToAssign =
      regionsToAssignWithServerName(tableRegionsAndLocations);
  if (services != null) {
    // need to potentially create some regions for the replicas
    List<HRegionInfo> unrecordedReplicas = AssignmentManager.replicaRegionsNotRecordedInMeta(
        new HashSet<HRegionInfo>(regionsToAssign.keySet()), services);
    Map<ServerName, List<HRegionInfo>> srvToUnassignedRegs =
          this.assignmentManager.getBalancer().roundRobinAssignment(unrecordedReplicas,
              serverManager.getOnlineServersList());
    if (srvToUnassignedRegs != null) {
      for (Map.Entry<ServerName, List<HRegionInfo>> entry : srvToUnassignedRegs.entrySet()) {
        for (HRegionInfo h : entry.getValue()) {
          regionsToAssign.put(h, entry.getKey());
        }
      }
    }
  }
  int regionsCount = regionsToAssign.size();
  if (regionsCount == 0) {
    done = true;
  }
  LOG.info("Table '" + this.tableName + "' has " + countOfRegionsInTable
    + " regions, of which " + regionsCount + " are offline.");
  List<ServerName> onlineServers = serverManager.createDestinationServersList();
  Map<ServerName, List<HRegionInfo>> bulkPlan =
      this.assignmentManager.getBalancer().retainAssignment(regionsToAssign, onlineServers);
  if (bulkPlan != null) {
    LOG.info("Bulk assigning " + regionsCount + " region(s) across " + bulkPlan.size()
        + " server(s), retainAssignment=true");

    BulkAssigner ba =
        new GeneralBulkAssigner(this.server, bulkPlan, this.assignmentManager, true);
    try {
      if (ba.bulkAssign()) {
        done = true;
      }
    } catch (InterruptedException e) {
      LOG.warn("Enable operation was interrupted when enabling table '"
          + this.tableName + "'");
      // Preserve the interrupt.
      Thread.currentThread().interrupt();
    }
  } else {
    done = true;
    LOG.info("Balancer was unable to find suitable servers for table " + tableName
        + ", leaving unassigned");
  }
  if (done) {
    // Flip the table to enabled.
    this.assignmentManager.getTableStateManager().setTableState(
      this.tableName, ZooKeeperProtos.Table.State.ENABLED);
    LOG.info("Table '" + this.tableName
    + "' was successfully enabled. Status: done=" + done);
  } else {
    LOG.warn("Table '" + this.tableName
    + "' wasn't successfully enabled. Status: done=" + done);
  }
}
项目:ditb    文件:EnableTableProcedure.java   
/**
 * Mark offline regions of the table online
 * @param env MasterProcedureEnv
 * @param tableName the target table
 * @return whether the operation is fully completed or being interrupted.
 * @throws IOException
 */
private static boolean markRegionsOnline(final MasterProcedureEnv env, final TableName tableName)
    throws IOException {
  final AssignmentManager assignmentManager = env.getMasterServices().getAssignmentManager();
  final MasterServices masterServices = env.getMasterServices();
  final ServerManager serverManager = masterServices.getServerManager();
  boolean done = false;
  // Get the regions of this table. We're done when all listed
  // tables are onlined.
  List<Pair<HRegionInfo, ServerName>> tableRegionsAndLocations;

  if (TableName.META_TABLE_NAME.equals(tableName)) {
    tableRegionsAndLocations =
        new MetaTableLocator().getMetaRegionsAndLocations(masterServices.getZooKeeper());
  } else {
    tableRegionsAndLocations =
        MetaTableAccessor.getTableRegionsAndLocations(
          masterServices.getZooKeeper(), masterServices.getConnection(), tableName, true);
  }

  int countOfRegionsInTable = tableRegionsAndLocations.size();
  Map<HRegionInfo, ServerName> regionsToAssign =
      regionsToAssignWithServerName(env, tableRegionsAndLocations);

  // need to potentially create some regions for the replicas
  List<HRegionInfo> unrecordedReplicas =
      AssignmentManager.replicaRegionsNotRecordedInMeta(new HashSet<HRegionInfo>(
          regionsToAssign.keySet()), masterServices);
  Map<ServerName, List<HRegionInfo>> srvToUnassignedRegs =
      assignmentManager.getBalancer().roundRobinAssignment(unrecordedReplicas,
        serverManager.getOnlineServersList());
  if (srvToUnassignedRegs != null) {
    for (Map.Entry<ServerName, List<HRegionInfo>> entry : srvToUnassignedRegs.entrySet()) {
      for (HRegionInfo h : entry.getValue()) {
        regionsToAssign.put(h, entry.getKey());
      }
    }
  }

  int offlineRegionsCount = regionsToAssign.size();

  LOG.info("Table '" + tableName + "' has " + countOfRegionsInTable + " regions, of which "
      + offlineRegionsCount + " are offline.");
  if (offlineRegionsCount == 0) {
    return true;
  }

  List<ServerName> onlineServers = serverManager.createDestinationServersList();
  Map<ServerName, List<HRegionInfo>> bulkPlan =
      env.getMasterServices().getAssignmentManager().getBalancer()
          .retainAssignment(regionsToAssign, onlineServers);
  if (bulkPlan != null) {
    LOG.info("Bulk assigning " + offlineRegionsCount + " region(s) across " + bulkPlan.size()
        + " server(s), retainAssignment=true");

    BulkAssigner ba = new GeneralBulkAssigner(masterServices, bulkPlan, assignmentManager, true);
    try {
      if (ba.bulkAssign()) {
        done = true;
      }
    } catch (InterruptedException e) {
      LOG.warn("Enable operation was interrupted when enabling table '" + tableName + "'");
      // Preserve the interrupt.
      Thread.currentThread().interrupt();
    }
  } else {
    LOG.info("Balancer was unable to find suitable servers for table " + tableName
        + ", leaving unassigned");
  }
  return done;
}
项目:pbase    文件:EnableTableHandler.java   
private void handleEnableTable() throws IOException, CoordinatedStateException,
    InterruptedException {
  // I could check table is disabling and if so, not enable but require
  // that user first finish disabling but that might be obnoxious.

  // Set table enabling flag up in zk.
  this.assignmentManager.getTableStateManager().setTableState(this.tableName,
    ZooKeeperProtos.Table.State.ENABLING);
  boolean done = false;
  ServerManager serverManager = ((HMaster)this.server).getServerManager();
  // Get the regions of this table. We're done when all listed
  // tables are onlined.
  List<Pair<HRegionInfo, ServerName>> tableRegionsAndLocations;
  if (TableName.META_TABLE_NAME.equals(tableName)) {
    tableRegionsAndLocations = new MetaTableLocator().getMetaRegionsAndLocations(
      server.getZooKeeper());
  } else {
    tableRegionsAndLocations = MetaTableAccessor.getTableRegionsAndLocations(
      server.getZooKeeper(), server.getConnection(), tableName, true);
  }

  int countOfRegionsInTable = tableRegionsAndLocations.size();
  Map<HRegionInfo, ServerName> regionsToAssign =
      regionsToAssignWithServerName(tableRegionsAndLocations);
  if (services != null) {
    // need to potentially create some regions for the replicas
    List<HRegionInfo> unrecordedReplicas = AssignmentManager.replicaRegionsNotRecordedInMeta(
        new HashSet<HRegionInfo>(regionsToAssign.keySet()), services);
    Map<ServerName, List<HRegionInfo>> srvToUnassignedRegs =
          this.assignmentManager.getBalancer().roundRobinAssignment(unrecordedReplicas,
              serverManager.getOnlineServersList());
    if (srvToUnassignedRegs != null) {
      for (Map.Entry<ServerName, List<HRegionInfo>> entry : srvToUnassignedRegs.entrySet()) {
        for (HRegionInfo h : entry.getValue()) {
          regionsToAssign.put(h, entry.getKey());
        }
      }
    }
  }
  int regionsCount = regionsToAssign.size();
  if (regionsCount == 0) {
    done = true;
  }
  LOG.info("Table '" + this.tableName + "' has " + countOfRegionsInTable
    + " regions, of which " + regionsCount + " are offline.");
  List<ServerName> onlineServers = serverManager.createDestinationServersList();
  Map<ServerName, List<HRegionInfo>> bulkPlan =
      this.assignmentManager.getBalancer().retainAssignment(regionsToAssign, onlineServers);
  if (bulkPlan != null) {
    LOG.info("Bulk assigning " + regionsCount + " region(s) across " + bulkPlan.size()
        + " server(s), retainAssignment=true");

    BulkAssigner ba =
        new GeneralBulkAssigner(this.server, bulkPlan, this.assignmentManager, true);
    try {
      if (ba.bulkAssign()) {
        done = true;
      }
    } catch (InterruptedException e) {
      LOG.warn("Enable operation was interrupted when enabling table '"
          + this.tableName + "'");
      // Preserve the interrupt.
      Thread.currentThread().interrupt();
    }
  } else {
    done = true;
    LOG.info("Balancer was unable to find suitable servers for table " + tableName
        + ", leaving unassigned");
  }
  if (done) {
    // Flip the table to enabled.
    this.assignmentManager.getTableStateManager().setTableState(
      this.tableName, ZooKeeperProtos.Table.State.ENABLED);
    LOG.info("Table '" + this.tableName
    + "' was successfully enabled. Status: done=" + done);
  } else {
    LOG.warn("Table '" + this.tableName
    + "' wasn't successfully enabled. Status: done=" + done);
  }
}
项目:HIndex    文件:EnableTableHandler.java   
private void handleEnableTable() throws IOException, KeeperException, InterruptedException {
  // I could check table is disabling and if so, not enable but require
  // that user first finish disabling but that might be obnoxious.

  // Set table enabling flag up in zk.
  this.assignmentManager.getZKTable().setEnablingTable(this.tableName);
  boolean done = false;
  ServerManager serverManager = ((HMaster)this.server).getServerManager();
  // Get the regions of this table. We're done when all listed
  // tables are onlined.
  List<Pair<HRegionInfo, ServerName>> tableRegionsAndLocations = MetaReader
      .getTableRegionsAndLocations(this.catalogTracker, tableName, true);
  int countOfRegionsInTable = tableRegionsAndLocations.size();
  Map<HRegionInfo, ServerName> regionsToAssign =
      regionsToAssignWithServerName(tableRegionsAndLocations);
  int regionsCount = regionsToAssign.size();
  if (regionsCount == 0) {
    done = true;
  }
  LOG.info("Table '" + this.tableName + "' has " + countOfRegionsInTable
    + " regions, of which " + regionsCount + " are offline.");
  List<ServerName> onlineServers = serverManager.createDestinationServersList();
  Map<ServerName, List<HRegionInfo>> bulkPlan =
      this.assignmentManager.getBalancer().retainAssignment(regionsToAssign, onlineServers);
  LOG.info("Bulk assigning " + regionsCount + " region(s) across " + bulkPlan.size()
    + " server(s), retainAssignment=true");

  BulkAssigner ba = new GeneralBulkAssigner(this.server, bulkPlan, this.assignmentManager, true);
  try {
    if (ba.bulkAssign()) {
      done = true;
    }
  } catch (InterruptedException e) {
    LOG.warn("Enable operation was interrupted when enabling table '"
      + this.tableName + "'");
    // Preserve the interrupt.
    Thread.currentThread().interrupt();
  }
  if (done) {
    // Flip the table to enabled.
    this.assignmentManager.getZKTable().setEnabledTable(
      this.tableName);
    LOG.info("Table '" + this.tableName
    + "' was successfully enabled. Status: done=" + done);
  } else {
    LOG.warn("Table '" + this.tableName
    + "' wasn't successfully enabled. Status: done=" + done);
  }
}
项目:PyroDB    文件:EnableTableHandler.java   
private void handleEnableTable() throws IOException, CoordinatedStateException,
    InterruptedException {
  // I could check table is disabling and if so, not enable but require
  // that user first finish disabling but that might be obnoxious.

  // Set table enabling flag up in zk.
  this.assignmentManager.getTableStateManager().setTableState(this.tableName,
    ZooKeeperProtos.Table.State.ENABLING);
  boolean done = false;
  ServerManager serverManager = ((HMaster)this.server).getServerManager();
  // Get the regions of this table. We're done when all listed
  // tables are onlined.
  List<Pair<HRegionInfo, ServerName>> tableRegionsAndLocations = MetaReader
      .getTableRegionsAndLocations(this.catalogTracker, tableName, true);
  int countOfRegionsInTable = tableRegionsAndLocations.size();
  Map<HRegionInfo, ServerName> regionsToAssign =
      regionsToAssignWithServerName(tableRegionsAndLocations);
  int regionsCount = regionsToAssign.size();
  if (regionsCount == 0) {
    done = true;
  }
  LOG.info("Table '" + this.tableName + "' has " + countOfRegionsInTable
    + " regions, of which " + regionsCount + " are offline.");
  List<ServerName> onlineServers = serverManager.createDestinationServersList();
  Map<ServerName, List<HRegionInfo>> bulkPlan =
      this.assignmentManager.getBalancer().retainAssignment(regionsToAssign, onlineServers);
  LOG.info("Bulk assigning " + regionsCount + " region(s) across " + bulkPlan.size()
    + " server(s), retainAssignment=true");

  BulkAssigner ba = new GeneralBulkAssigner(this.server, bulkPlan, this.assignmentManager, true);
  try {
    if (ba.bulkAssign()) {
      done = true;
    }
  } catch (InterruptedException e) {
    LOG.warn("Enable operation was interrupted when enabling table '"
      + this.tableName + "'");
    // Preserve the interrupt.
    Thread.currentThread().interrupt();
  }
  if (done) {
    // Flip the table to enabled.
    this.assignmentManager.getTableStateManager().setTableState(
      this.tableName, ZooKeeperProtos.Table.State.ENABLED);
    LOG.info("Table '" + this.tableName
    + "' was successfully enabled. Status: done=" + done);
  } else {
    LOG.warn("Table '" + this.tableName
    + "' wasn't successfully enabled. Status: done=" + done);
  }
}