This is an automated email from the ASF dual-hosted git repository.

anmolnar pushed a commit to branch HBASE-29164
in repository https://gitbox.apache.org/repos/asf/hbase.git

commit 7de873b583cf87a1c9dcc1498e1e9bb86e842a47
Author: Kevin Geiszler <[email protected]>
AuthorDate: Mon Jul 13 16:19:09 2026 -0400

    Delete 
hbase-it/src/test/java/org/apache/hadoop/hbase/IntegrationTestBackupRestore.java
    
    Change-Id: Ic99e588aa97765957f15458a39f863834fbfcd2b
---
 .../hadoop/hbase/IntegrationTestBackupRestore.java | 468 ---------------------
 1 file changed, 468 deletions(-)

diff --git 
a/hbase-it/src/test/java/org/apache/hadoop/hbase/IntegrationTestBackupRestore.java
 
b/hbase-it/src/test/java/org/apache/hadoop/hbase/IntegrationTestBackupRestore.java
deleted file mode 100644
index ea55a5c61d7..00000000000
--- 
a/hbase-it/src/test/java/org/apache/hadoop/hbase/IntegrationTestBackupRestore.java
+++ /dev/null
@@ -1,468 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.hadoop.hbase;
-
-import static 
org.apache.hadoop.hbase.IntegrationTestingUtility.createPreSplitLoadTestTable;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-
-import java.io.IOException;
-import java.nio.charset.Charset;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Set;
-import org.apache.hadoop.conf.Configuration;
-import org.apache.hadoop.fs.FileSystem;
-import org.apache.hadoop.fs.Path;
-import org.apache.hadoop.hbase.backup.BackupAdmin;
-import org.apache.hadoop.hbase.backup.BackupInfo;
-import org.apache.hadoop.hbase.backup.BackupInfo.BackupState;
-import org.apache.hadoop.hbase.backup.BackupRequest;
-import org.apache.hadoop.hbase.backup.BackupRestoreConstants;
-import org.apache.hadoop.hbase.backup.BackupType;
-import org.apache.hadoop.hbase.backup.RestoreRequest;
-import org.apache.hadoop.hbase.backup.impl.BackupAdminImpl;
-import org.apache.hadoop.hbase.backup.impl.BackupManager;
-import org.apache.hadoop.hbase.backup.impl.BackupSystemTable;
-import org.apache.hadoop.hbase.chaos.actions.RestartRandomRsExceptMetaAction;
-import org.apache.hadoop.hbase.chaos.monkies.PolicyBasedChaosMonkey;
-import org.apache.hadoop.hbase.chaos.policies.PeriodicRandomActionPolicy;
-import org.apache.hadoop.hbase.chaos.policies.Policy;
-import org.apache.hadoop.hbase.client.Admin;
-import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;
-import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;
-import org.apache.hadoop.hbase.client.Connection;
-import org.apache.hadoop.hbase.client.Table;
-import org.apache.hadoop.hbase.client.TableDescriptor;
-import org.apache.hadoop.hbase.client.TableDescriptorBuilder;
-import org.apache.hadoop.hbase.testclassification.IntegrationTests;
-import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;
-import org.apache.hadoop.util.ToolRunner;
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Tag;
-import org.junit.jupiter.api.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import org.apache.hbase.thirdparty.com.google.common.base.MoreObjects;
-import org.apache.hbase.thirdparty.com.google.common.collect.Lists;
-import 
org.apache.hbase.thirdparty.com.google.common.util.concurrent.Uninterruptibles;
-import org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLine;
-
-/**
- * An integration test to detect regressions in HBASE-7912. Create a table 
with many regions, load
- * data, perform series backup/load operations, then restore and verify data
- * @see <a 
href="https://issues.apache.org/jira/browse/HBASE-7912";>HBASE-7912</a>
- * @see <a 
href="https://issues.apache.org/jira/browse/HBASE-14123";>HBASE-14123</a>
- */
-@Tag(IntegrationTests.TAG)
-public class IntegrationTestBackupRestore extends IntegrationTestBase {
-  private static final String CLASS_NAME = 
IntegrationTestBackupRestore.class.getSimpleName();
-  protected static final Logger LOG = 
LoggerFactory.getLogger(IntegrationTestBackupRestore.class);
-  protected static final String NUMBER_OF_TABLES_KEY = "num_tables";
-  protected static final String COLUMN_NAME = "f";
-  protected static final String REGION_COUNT_KEY = "regions_per_rs";
-  protected static final String REGIONSERVER_COUNT_KEY = "region_servers";
-  protected static final String ROWS_PER_ITERATION_KEY = "rows_in_iteration";
-  protected static final String NUM_ITERATIONS_KEY = "num_iterations";
-  protected static final int DEFAULT_REGION_COUNT = 10;
-  protected static final int DEFAULT_REGIONSERVER_COUNT = 5;
-  protected static final int DEFAULT_NUMBER_OF_TABLES = 1;
-  protected static final int DEFAULT_NUM_ITERATIONS = 10;
-  protected static final int DEFAULT_ROWS_IN_ITERATION = 10000;
-  protected static final String SLEEP_TIME_KEY = "sleeptime";
-  // short default interval because tests don't run very long.
-  protected static final long SLEEP_TIME_DEFAULT = 50000L;
-
-  protected static int rowsInIteration;
-  protected static int regionsCountPerServer;
-  protected static int regionServerCount;
-
-  protected static int numIterations;
-  protected static int numTables;
-  protected static TableName[] tableNames;
-  protected long sleepTime;
-  protected static Object lock = new Object();
-
-  private static String BACKUP_ROOT_DIR = "backupIT";
-
-  /*
-   * This class is used to run the backup and restore thread(s). Throwing an 
exception in this
-   * thread will not cause the test to fail, so the purpose of this class is 
to both kick off the
-   * backup and restore and record any exceptions that occur so they can be 
thrown in the main
-   * thread.
-   */
-  protected class BackupAndRestoreThread implements Runnable {
-    private final TableName table;
-    private Throwable throwable;
-
-    public BackupAndRestoreThread(TableName table) {
-      this.table = table;
-      this.throwable = null;
-    }
-
-    public Throwable getThrowable() {
-      return this.throwable;
-    }
-
-    @Override
-    public void run() {
-      try {
-        runTestSingle(this.table);
-      } catch (Throwable t) {
-        LOG.error(
-          "An error occurred in thread {} when performing a backup and restore 
with table {}: ",
-          Thread.currentThread().getName(), this.table.getNameAsString(), t);
-        this.throwable = t;
-      }
-    }
-  }
-
-  @Override
-  @BeforeEach
-  public void setUp() throws Exception {
-    util = new IntegrationTestingUtility();
-    Configuration conf = util.getConfiguration();
-    regionsCountPerServer = conf.getInt(REGION_COUNT_KEY, 
DEFAULT_REGION_COUNT);
-    regionServerCount = conf.getInt(REGIONSERVER_COUNT_KEY, 
DEFAULT_REGIONSERVER_COUNT);
-    rowsInIteration = conf.getInt(ROWS_PER_ITERATION_KEY, 
DEFAULT_ROWS_IN_ITERATION);
-    numIterations = conf.getInt(NUM_ITERATIONS_KEY, DEFAULT_NUM_ITERATIONS);
-    numTables = conf.getInt(NUMBER_OF_TABLES_KEY, DEFAULT_NUMBER_OF_TABLES);
-    sleepTime = conf.getLong(SLEEP_TIME_KEY, SLEEP_TIME_DEFAULT);
-    enableBackup(conf);
-    LOG.info("Initializing cluster with {} region servers.", 
regionServerCount);
-    util.initializeCluster(regionServerCount);
-    LOG.info("Cluster initialized and ready");
-  }
-
-  @AfterEach
-  public void tearDown() throws IOException {
-    LOG.info("Cleaning up after test.");
-    if (util.isDistributedCluster()) {
-      deleteTablesIfAny();
-      LOG.info("Cleaning up after test. Deleted tables");
-      cleanUpBackupDir();
-    }
-    LOG.info("Restoring cluster.");
-    util.restoreCluster();
-    LOG.info("Cluster restored.");
-  }
-
-  @Override
-  public void setUpMonkey() throws Exception {
-    Policy p =
-      new PeriodicRandomActionPolicy(sleepTime, new 
RestartRandomRsExceptMetaAction(sleepTime));
-    this.monkey = new PolicyBasedChaosMonkey(util, p);
-    startMonkey();
-  }
-
-  private void deleteTablesIfAny() throws IOException {
-    for (TableName table : tableNames) {
-      util.deleteTableIfAny(table);
-    }
-  }
-
-  private void createTables() throws Exception {
-    tableNames = new TableName[numTables];
-    for (int i = 0; i < numTables; i++) {
-      tableNames[i] = TableName.valueOf(CLASS_NAME + ".table." + i);
-    }
-    for (TableName table : tableNames) {
-      createTable(table);
-    }
-  }
-
-  private void enableBackup(Configuration conf) {
-    // Enable backup
-    conf.setBoolean(BackupRestoreConstants.BACKUP_ENABLE_KEY, true);
-    BackupManager.decorateMasterConfiguration(conf);
-    BackupManager.decorateRegionServerConfiguration(conf);
-  }
-
-  private void cleanUpBackupDir() throws IOException {
-    FileSystem fs = FileSystem.get(util.getConfiguration());
-    fs.delete(new Path(BACKUP_ROOT_DIR), true);
-  }
-
-  @Test
-  public void testBackupRestore() throws Exception {
-    BACKUP_ROOT_DIR = util.getDataTestDirOnTestFS() + Path.SEPARATOR + 
BACKUP_ROOT_DIR;
-    createTables();
-    runTestMulti();
-  }
-
-  private void runTestMulti() throws Exception {
-    LOG.info("IT backup & restore started");
-    Thread[] workers = new Thread[numTables];
-    BackupAndRestoreThread[] backupAndRestoreThreads = new 
BackupAndRestoreThread[numTables];
-    for (int i = 0; i < numTables; i++) {
-      final TableName table = tableNames[i];
-      BackupAndRestoreThread backupAndRestoreThread = new 
BackupAndRestoreThread(table);
-      backupAndRestoreThreads[i] = backupAndRestoreThread;
-      workers[i] = new Thread(backupAndRestoreThread);
-      workers[i].start();
-    }
-    // Wait for all workers to finish and check for errors
-    Throwable error = null;
-    Throwable threadThrowable;
-    for (int i = 0; i < numTables; i++) {
-      Uninterruptibles.joinUninterruptibly(workers[i]);
-      threadThrowable = backupAndRestoreThreads[i].getThrowable();
-      if (threadThrowable == null) {
-        continue;
-      }
-      if (error == null) {
-        error = threadThrowable;
-      } else {
-        error.addSuppressed(threadThrowable);
-      }
-    }
-    // Throw any found errors after all threads have completed
-    if (error != null) {
-      throw new AssertionError("An error occurred in a backup and restore 
thread", error);
-    }
-    LOG.info("IT backup & restore finished");
-  }
-
-  private void createTable(TableName tableName) throws Exception {
-    long startTime, endTime;
-
-    TableDescriptorBuilder builder = 
TableDescriptorBuilder.newBuilder(tableName);
-
-    TableDescriptor desc = builder.build();
-    ColumnFamilyDescriptorBuilder cbuilder =
-      
ColumnFamilyDescriptorBuilder.newBuilder(COLUMN_NAME.getBytes(Charset.defaultCharset()));
-    ColumnFamilyDescriptor[] columns = new ColumnFamilyDescriptor[] { 
cbuilder.build() };
-    LOG.info("Creating table {} with {} splits.", tableName,
-      regionsCountPerServer * regionServerCount);
-    startTime = EnvironmentEdgeManager.currentTime();
-    createPreSplitLoadTestTable(util.getConfiguration(), desc, columns, 
regionsCountPerServer);
-    util.waitTableAvailable(tableName);
-    endTime = EnvironmentEdgeManager.currentTime();
-    LOG.info("Pre-split table created successfully in {}ms.", (endTime - 
startTime));
-  }
-
-  private void loadData(TableName table, int numRows) throws IOException {
-    Connection conn = util.getConnection();
-    // #0- insert some data to a table
-    Table t1 = conn.getTable(table);
-    util.loadRandomRows(t1, new byte[] { 'f' }, 100, numRows);
-    // flush table
-    conn.getAdmin().flush(TableName.valueOf(table.getName()));
-  }
-
-  private String backup(BackupRequest request, BackupAdmin client) throws 
IOException {
-    return client.backupTables(request);
-  }
-
-  private void restore(RestoreRequest request, BackupAdmin client) throws 
IOException {
-    client.restore(request);
-  }
-
-  private void merge(String[] backupIds, BackupAdmin client) throws 
IOException {
-    client.mergeBackups(backupIds);
-  }
-
-  private void runTestSingle(TableName table) throws IOException {
-
-    List<String> backupIds = new ArrayList<String>();
-
-    try (Connection conn = util.getConnection(); Admin admin = conn.getAdmin();
-      BackupAdmin client = new BackupAdminImpl(conn);) {
-
-      // #0- insert some data to table 'table'
-      loadData(table, rowsInIteration);
-
-      // #1 - create full backup for table first
-      LOG.info("create full backup image for {}", table);
-      List<TableName> tables = Lists.newArrayList(table);
-      BackupRequest.Builder builder = new BackupRequest.Builder();
-      BackupRequest request = 
builder.withBackupType(BackupType.FULL).withTableList(tables)
-        .withTargetRootDir(BACKUP_ROOT_DIR).build();
-
-      String backupIdFull = backup(request, client);
-      assertTrue(checkSucceeded(backupIdFull));
-
-      backupIds.add(backupIdFull);
-      // Now continue with incremental backups
-      int count = 1;
-      while (count++ < numIterations) {
-
-        // Load data
-        loadData(table, rowsInIteration);
-        // Do incremental backup
-        builder = new BackupRequest.Builder();
-        request = 
builder.withBackupType(BackupType.INCREMENTAL).withTableList(tables)
-          .withTargetRootDir(BACKUP_ROOT_DIR).build();
-        String backupId = backup(request, client);
-        assertTrue(checkSucceeded(backupId));
-        backupIds.add(backupId);
-
-        // Restore incremental backup for table, with overwrite for previous 
backup
-        String previousBackupId = backupIds.get(backupIds.size() - 2);
-        restoreVerifyTable(conn, client, table, previousBackupId, 
rowsInIteration * (count - 1));
-        // Restore incremental backup for table, with overwrite for last backup
-        restoreVerifyTable(conn, client, table, backupId, rowsInIteration * 
count);
-      }
-      // Now merge all incremental and restore
-      String[] incBackupIds = allIncremental(backupIds);
-      merge(incBackupIds, client);
-      // Restore last one
-      String backupId = incBackupIds[incBackupIds.length - 1];
-      // restore incremental backup for table, with overwrite
-      TableName[] tablesRestoreIncMultiple = new TableName[] { table };
-      restore(createRestoreRequest(BACKUP_ROOT_DIR, backupId, false, 
tablesRestoreIncMultiple, null,
-        true), client);
-      Table hTable = conn.getTable(table);
-      assertEquals(util.countRows(hTable), rowsInIteration * numIterations);
-      hTable.close();
-      LOG.info("{} loop {} finished.", Thread.currentThread().getName(), 
(count - 1));
-    }
-  }
-
-  private void restoreVerifyTable(Connection conn, BackupAdmin client, 
TableName table,
-    String backupId, long expectedRows) throws IOException {
-    TableName[] tablesRestoreIncMultiple = new TableName[] { table };
-    restore(
-      createRestoreRequest(BACKUP_ROOT_DIR, backupId, false, 
tablesRestoreIncMultiple, null, true),
-      client);
-    Table hTable = conn.getTable(table);
-    assertEquals(expectedRows, util.countRows(hTable));
-    hTable.close();
-  }
-
-  private String[] allIncremental(List<String> backupIds) {
-    int size = backupIds.size();
-    backupIds = backupIds.subList(1, size);
-    String[] arr = new String[size - 1];
-    backupIds.toArray(arr);
-    return arr;
-  }
-
-  /** Returns status of backup */
-  protected boolean checkSucceeded(String backupId) throws IOException {
-    BackupInfo status = getBackupInfo(backupId);
-    if (status == null) {
-      return false;
-    }
-    return status.getState() == BackupState.COMPLETE;
-  }
-
-  private BackupInfo getBackupInfo(String backupId) throws IOException {
-    try (BackupSystemTable table = new 
BackupSystemTable(util.getConnection())) {
-      return table.readBackupInfo(backupId);
-    }
-  }
-
-  /**
-   * Get restore request.
-   * @param backupRootDir directory where backup is located
-   * @param backupId      backup ID
-   * @param check         check the backup
-   * @param fromTables    table names to restore from
-   * @param toTables      new table names to restore to
-   * @param isOverwrite   overwrite the table(s)
-   * @return an instance of RestoreRequest
-   */
-  public RestoreRequest createRestoreRequest(String backupRootDir, String 
backupId, boolean check,
-    TableName[] fromTables, TableName[] toTables, boolean isOverwrite) {
-    RestoreRequest.Builder builder = new RestoreRequest.Builder();
-    return 
builder.withBackupRootDir(backupRootDir).withBackupId(backupId).withCheck(check)
-      
.withFromTables(fromTables).withToTables(toTables).withOverwrite(isOverwrite).build();
-  }
-
-  @Override
-  public void setUpCluster() throws Exception {
-    util = getTestingUtil(getConf());
-    enableBackup(getConf());
-    LOG.debug("Initializing/checking cluster has {} servers", 
regionServerCount);
-    util.initializeCluster(regionServerCount);
-    LOG.debug("Done initializing/checking cluster");
-  }
-
-  /** Returns status of CLI execution */
-  @Override
-  public int runTestFromCommandLine() throws Exception {
-    // Check if backup is enabled
-    if (!BackupManager.isBackupEnabled(getConf())) {
-      System.err.println(BackupRestoreConstants.ENABLE_BACKUP);
-      return -1;
-    }
-    System.out.println(BackupRestoreConstants.VERIFY_BACKUP);
-    testBackupRestore();
-    return 0;
-  }
-
-  @Override
-  public TableName getTablename() {
-    // That is only valid when Monkey is CALM (no monkey)
-    return null;
-  }
-
-  @Override
-  protected Set<String> getColumnFamilies() {
-    // That is only valid when Monkey is CALM (no monkey)
-    return null;
-  }
-
-  @Override
-  protected void addOptions() {
-    addOptWithArg(REGIONSERVER_COUNT_KEY,
-      "Total number of region servers. Default: '" + 
DEFAULT_REGIONSERVER_COUNT + "'");
-    addOptWithArg(REGION_COUNT_KEY, "Total number of regions. Default: " + 
DEFAULT_REGION_COUNT);
-    addOptWithArg(ROWS_PER_ITERATION_KEY,
-      "Total number of data rows to be loaded during one iteration." + " 
Default: "
-        + DEFAULT_ROWS_IN_ITERATION);
-    addOptWithArg(NUM_ITERATIONS_KEY,
-      "Total number iterations." + " Default: " + DEFAULT_NUM_ITERATIONS);
-    addOptWithArg(NUMBER_OF_TABLES_KEY,
-      "Total number of tables in the test." + " Default: " + 
DEFAULT_NUMBER_OF_TABLES);
-    addOptWithArg(SLEEP_TIME_KEY, "Sleep time of chaos monkey in ms "
-      + "to restart random region server. Default: " + SLEEP_TIME_DEFAULT);
-  }
-
-  @Override
-  protected void processOptions(CommandLine cmd) {
-    super.processOptions(cmd);
-    regionsCountPerServer = Integer
-      .parseInt(cmd.getOptionValue(REGION_COUNT_KEY, 
Integer.toString(DEFAULT_REGION_COUNT)));
-    regionServerCount = Integer.parseInt(
-      cmd.getOptionValue(REGIONSERVER_COUNT_KEY, 
Integer.toString(DEFAULT_REGIONSERVER_COUNT)));
-    rowsInIteration = Integer.parseInt(
-      cmd.getOptionValue(ROWS_PER_ITERATION_KEY, 
Integer.toString(DEFAULT_ROWS_IN_ITERATION)));
-    numIterations = Integer
-      .parseInt(cmd.getOptionValue(NUM_ITERATIONS_KEY, 
Integer.toString(DEFAULT_NUM_ITERATIONS)));
-    numTables = Integer.parseInt(
-      cmd.getOptionValue(NUMBER_OF_TABLES_KEY, 
Integer.toString(DEFAULT_NUMBER_OF_TABLES)));
-    sleepTime =
-      Long.parseLong(cmd.getOptionValue(SLEEP_TIME_KEY, 
Long.toString(SLEEP_TIME_DEFAULT)));
-
-    LOG.info(MoreObjects.toStringHelper("Parsed Options")
-      .add(REGION_COUNT_KEY, 
regionsCountPerServer).add(REGIONSERVER_COUNT_KEY, regionServerCount)
-      .add(ROWS_PER_ITERATION_KEY, rowsInIteration).add(NUM_ITERATIONS_KEY, 
numIterations)
-      .add(NUMBER_OF_TABLES_KEY, numTables).add(SLEEP_TIME_KEY, 
sleepTime).toString());
-  }
-
-  public static void main(String[] args) throws Exception {
-    Configuration conf = HBaseConfiguration.create();
-    IntegrationTestingUtility.setUseDistributedCluster(conf);
-    int status = ToolRunner.run(conf, new IntegrationTestBackupRestore(), 
args);
-    System.exit(status);
-  }
-}

Reply via email to