HBASE-26096 Cleanup the deprecated methods in HBTU related classes and format code (#3503)
Signed-off-by: Xiaolin Ha <haxiaolin@apache.org>
Signed-off-by: Yulin Niu <niuyulin@apache.org>
diff --git a/hbase-common/src/test/java/org/apache/hadoop/hbase/HBaseCommonTestingUtil.java b/hbase-common/src/test/java/org/apache/hadoop/hbase/HBaseCommonTestingUtil.java
index f78e9de..1c8f8b9 100644
--- a/hbase-common/src/test/java/org/apache/hadoop/hbase/HBaseCommonTestingUtil.java
+++ b/hbase-common/src/test/java/org/apache/hadoop/hbase/HBaseCommonTestingUtil.java
@@ -49,26 +49,19 @@
* Compression algorithms to use in parameterized JUnit 4 tests
*/
public static final List<Object[]> COMPRESSION_ALGORITHMS_PARAMETERIZED =
- Arrays.asList(new Object[][] {
- { Compression.Algorithm.NONE },
- { Compression.Algorithm.GZ }
- });
+ Arrays.asList(new Object[][] { { Compression.Algorithm.NONE }, { Compression.Algorithm.GZ } });
/**
* This is for unit tests parameterized with a two booleans.
*/
public static final List<Object[]> BOOLEAN_PARAMETERIZED =
- Arrays.asList(new Object[][] {
- {false},
- {true}
- });
+ Arrays.asList(new Object[][] { { false }, { true } });
/**
* Compression algorithms to use in testing
*/
- public static final Compression.Algorithm[] COMPRESSION_ALGORITHMS = {
- Compression.Algorithm.NONE, Compression.Algorithm.GZ
- };
+ public static final Compression.Algorithm[] COMPRESSION_ALGORITHMS =
+ { Compression.Algorithm.NONE, Compression.Algorithm.GZ };
protected final Configuration conf;
@@ -82,7 +75,6 @@
/**
* Returns this classes's instance of {@link Configuration}.
- *
* @return Instance of Configuration.
*/
public Configuration getConfiguration() {
@@ -92,8 +84,7 @@
/**
* System property key to get base test directory value
*/
- public static final String BASE_TEST_DIRECTORY_KEY =
- "test.build.data.basedirectory";
+ public static final String BASE_TEST_DIRECTORY_KEY = "test.build.data.basedirectory";
/**
* Default base directory for test output.
@@ -127,13 +118,11 @@
/**
* Sets up a directory for a test to use.
- *
* @return New directory path, if created.
*/
protected Path setupDataTestDir() {
if (this.dataTestDir != null) {
- LOG.warn("Data test dir already setup in " +
- dataTestDir.getAbsolutePath());
+ LOG.warn("Data test dir already setup in " + dataTestDir.getAbsolutePath());
return null;
}
Path testPath = getRandomDir();
@@ -151,7 +140,7 @@
}
/**
- * Returns A dir with a random (uuid) name under the test dir
+ * Returns a dir with a random (uuid) name under the test dir
* @see #getBaseTestDir()
*/
public Path getRandomDir() {
@@ -159,8 +148,7 @@
}
public static UUID getRandomUUID() {
- return new UUID(ThreadLocalRandom.current().nextLong(),
- ThreadLocalRandom.current().nextLong());
+ return new UUID(ThreadLocalRandom.current().nextLong(), ThreadLocalRandom.current().nextLong());
}
protected void createSubDir(String propertyName, Path parent, String subDirName) {
@@ -212,8 +200,7 @@
* @see #setupDataTestDir()
*/
private Path getBaseTestDir() {
- String PathName = System.getProperty(
- BASE_TEST_DIRECTORY_KEY, DEFAULT_BASE_TEST_DIRECTORY);
+ String PathName = System.getProperty(BASE_TEST_DIRECTORY_KEY, DEFAULT_BASE_TEST_DIRECTORY);
return new Path(PathName);
}
@@ -248,8 +235,7 @@
/**
* Wrapper method for {@link Waiter#waitFor(Configuration, long, Predicate)}.
*/
- public <E extends Exception> long waitFor(long timeout, Predicate<E> predicate)
- throws E {
+ public <E extends Exception> long waitFor(long timeout, Predicate<E> predicate) throws E {
return Waiter.waitFor(this.conf, timeout, predicate);
}
@@ -257,15 +243,15 @@
* Wrapper method for {@link Waiter#waitFor(Configuration, long, long, Predicate)}.
*/
public <E extends Exception> long waitFor(long timeout, long interval, Predicate<E> predicate)
- throws E {
+ throws E {
return Waiter.waitFor(this.conf, timeout, interval, predicate);
}
/**
* Wrapper method for {@link Waiter#waitFor(Configuration, long, long, boolean, Predicate)}.
*/
- public <E extends Exception> long waitFor(long timeout, long interval,
- boolean failIfTimeout, Predicate<E> predicate) throws E {
+ public <E extends Exception> long waitFor(long timeout, long interval, boolean failIfTimeout,
+ Predicate<E> predicate) throws E {
return Waiter.waitFor(this.conf, timeout, interval, failIfTimeout, predicate);
}
@@ -331,12 +317,11 @@
}
/**
- * Returns a random port. These ports cannot be registered with IANA and are
- * intended for dynamic allocation (see http://bit.ly/dynports).
+ * Returns a random port. These ports cannot be registered with IANA and are intended for
+ * dynamic allocation (see http://bit.ly/dynports).
*/
private int randomPort() {
- return MIN_RANDOM_PORT
- + random.nextInt(MAX_RANDOM_PORT - MIN_RANDOM_PORT);
+ return MIN_RANDOM_PORT + random.nextInt(MAX_RANDOM_PORT - MIN_RANDOM_PORT);
}
interface AvailablePortChecker {
diff --git a/hbase-it/src/test/java/org/apache/hadoop/hbase/mapreduce/IntegrationTestBulkLoad.java b/hbase-it/src/test/java/org/apache/hadoop/hbase/mapreduce/IntegrationTestBulkLoad.java
index 547753c..4fcb51f 100644
--- a/hbase-it/src/test/java/org/apache/hadoop/hbase/mapreduce/IntegrationTestBulkLoad.java
+++ b/hbase-it/src/test/java/org/apache/hadoop/hbase/mapreduce/IntegrationTestBulkLoad.java
@@ -211,7 +211,7 @@
TableDescriptor desc = admin.getDescriptor(t);
TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(desc);
builder.setCoprocessor(SlowMeCoproScanOperations.class.getName());
- HBaseTestingUtil.modifyTableSync(admin, builder.build());
+ admin.modifyTable(builder.build());
}
@Test
diff --git a/hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/MultiTableInputFormatTestBase.java b/hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/MultiTableInputFormatTestBase.java
index 45eb55f..28d44ed 100644
--- a/hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/MultiTableInputFormatTestBase.java
+++ b/hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/MultiTableInputFormatTestBase.java
@@ -37,6 +37,7 @@
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.client.Table;
import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
+import org.apache.hadoop.hbase.logging.Log4jUtils;
import org.apache.hadoop.hbase.util.Bytes;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.mapreduce.Job;
@@ -73,7 +74,7 @@
@BeforeClass
public static void setUpBeforeClass() throws Exception {
// switch TIF to log at DEBUG level
- TEST_UTIL.enableDebug(MultiTableInputFormatBase.class);
+ Log4jUtils.enableDebug(MultiTableInputFormatBase.class);
// start mini hbase cluster
TEST_UTIL.startMiniCluster(3);
// create and fill table
diff --git a/hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestMultiTableInputFormat.java b/hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestMultiTableInputFormat.java
index b4a53ea..eca7ca6 100644
--- a/hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestMultiTableInputFormat.java
+++ b/hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestMultiTableInputFormat.java
@@ -22,6 +22,7 @@
import org.apache.hadoop.hbase.HBaseClassTestRule;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
+import org.apache.hadoop.hbase.logging.Log4jUtils;
import org.apache.hadoop.hbase.testclassification.LargeTests;
import org.apache.hadoop.hbase.testclassification.VerySlowMapReduceTests;
import org.apache.hadoop.mapreduce.Job;
@@ -43,8 +44,8 @@
@BeforeClass
public static void setupLogging() {
- TEST_UTIL.enableDebug(MultiTableInputFormat.class);
- }
+ Log4jUtils.enableDebug(MultiTableInputFormat.class);
+ }
@Override
protected void initJob(List<Scan> scans, Job job) throws IOException {
diff --git a/hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestMultiTableSnapshotInputFormat.java b/hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestMultiTableSnapshotInputFormat.java
index 89e7b49..c9ba9ba 100644
--- a/hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestMultiTableSnapshotInputFormat.java
+++ b/hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestMultiTableSnapshotInputFormat.java
@@ -27,6 +27,7 @@
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
+import org.apache.hadoop.hbase.logging.Log4jUtils;
import org.apache.hadoop.hbase.snapshot.SnapshotTestingUtils;
import org.apache.hadoop.hbase.testclassification.LargeTests;
import org.apache.hadoop.hbase.testclassification.VerySlowMapReduceTests;
@@ -53,8 +54,8 @@
@BeforeClass
public static void setUpSnapshots() throws Exception {
- TEST_UTIL.enableDebug(MultiTableSnapshotInputFormat.class);
- TEST_UTIL.enableDebug(MultiTableSnapshotInputFormatImpl.class);
+ Log4jUtils.enableDebug(MultiTableSnapshotInputFormat.class);
+ Log4jUtils.enableDebug(MultiTableSnapshotInputFormatImpl.class);
// take a snapshot of every table we have.
for (String tableName : TABLES) {
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/HBaseClusterInterface.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/HBaseClusterInterface.java
index d43e62b..0584be8 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/HBaseClusterInterface.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/HBaseClusterInterface.java
@@ -28,28 +28,27 @@
import org.apache.yetus.audience.InterfaceStability;
/**
- * This class defines methods that can help with managing HBase clusters
- * from unit tests and system tests. There are 3 types of cluster deployments:
+ * This class defines methods that can help with managing HBase clusters from unit tests and system
+ * tests. There are 3 types of cluster deployments:
* <ul>
* <li><b>SingleProcessHBaseCluster:</b> each server is run in the same JVM in separate threads,
* used by unit tests</li>
* <li><b>DistributedHBaseCluster:</b> the cluster is pre-deployed, system and integration tests can
- * interact with the cluster. </li>
- * <li><b>ProcessBasedLocalHBaseCluster:</b> each server is deployed locally but in separate
- * JVMs. </li>
+ * interact with the cluster.</li>
+ * <li><b>ProcessBasedLocalHBaseCluster:</b> each server is deployed locally but in separate JVMs.
+ * </li>
* </ul>
* <p>
- * HBaseCluster unifies the way tests interact with the cluster, so that the same test can
- * be run against a mini-cluster during unit test execution, or a distributed cluster having
- * tens/hundreds of nodes during execution of integration tests.
- *
+ * HBaseCluster unifies the way tests interact with the cluster, so that the same test can be run
+ * against a mini-cluster during unit test execution, or a distributed cluster having tens/hundreds
+ * of nodes during execution of integration tests.
* <p>
* HBaseCluster exposes client-side public interfaces to tests, so that tests does not assume
- * running in a particular mode. Not all the tests are suitable to be run on an actual cluster,
- * and some tests will still need to mock stuff and introspect internal state. For those use
- * cases from unit tests, or if more control is needed, you can use the subclasses directly.
- * In that sense, this class does not abstract away <strong>every</strong> interface that
- * SingleProcessHBaseCluster or DistributedHBaseCluster provide.
+ * running in a particular mode. Not all the tests are suitable to be run on an actual cluster, and
+ * some tests will still need to mock stuff and introspect internal state. For those use cases from
+ * unit tests, or if more control is needed, you can use the subclasses directly. In that sense,
+ * this class does not abstract away <strong>every</strong> interface that SingleProcessHBaseCluster
+ * or DistributedHBaseCluster provide.
*/
@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.PHOENIX)
@InterfaceStability.Evolving
@@ -85,24 +84,23 @@
public abstract ClusterMetrics getClusterMetrics() throws IOException;
/**
- * Returns a ClusterStatus for this HBase cluster as observed at the
- * starting of the HBaseCluster
+ * Returns a ClusterStatus for this HBase cluster as observed at the starting of the HBaseCluster
*/
public ClusterMetrics getInitialClusterMetrics() throws IOException {
return initialClusterStatus;
}
/**
- * Starts a new region server on the given hostname or if this is a mini/local cluster,
- * starts a region server locally.
+ * Starts a new region server on the given hostname or if this is a mini/local cluster, starts a
+ * region server locally.
* @param hostname the hostname to start the regionserver on
* @throws IOException if something goes wrong
*/
public abstract void startRegionServer(String hostname, int port) throws IOException;
/**
- * Kills the region server process if this is a distributed cluster, otherwise
- * this causes the region server to exit doing basic clean up only.
+ * Kills the region server process if this is a distributed cluster, otherwise this causes the
+ * region server to exit doing basic clean up only.
* @throws IOException if something goes wrong
*/
public abstract void killRegionServer(ServerName serverName) throws IOException;
@@ -110,9 +108,9 @@
/**
* Keeping track of killed servers and being able to check if a particular server was killed makes
* it possible to do fault tolerance testing for dead servers in a deterministic way. A concrete
- * example of such case is - killing servers and waiting for all regions of a particular table
- * to be assigned. We can check for server column in META table and that its value is not one
- * of the killed servers.
+ * example of such case is - killing servers and waiting for all regions of a particular table to
+ * be assigned. We can check for server column in META table and that its value is not one of the
+ * killed servers.
*/
public abstract boolean isKilledRS(ServerName serverName);
@@ -127,7 +125,7 @@
* @throws IOException if something goes wrong or timeout occurs
*/
public void waitForRegionServerToStart(String hostname, int port, long timeout)
- throws IOException {
+ throws IOException {
long start = EnvironmentEdgeManager.currentTime();
while ((EnvironmentEdgeManager.currentTime() - start) < timeout) {
for (ServerName server : getClusterMetrics().getLiveServerMetrics().keySet()) {
@@ -137,8 +135,8 @@
}
Threads.sleep(100);
}
- throw new IOException("did timeout " + timeout + "ms waiting for region server to start: "
- + hostname);
+ throw new IOException(
+ "did timeout " + timeout + "ms waiting for region server to start: " + hostname);
}
/**
@@ -146,7 +144,7 @@
* @throws IOException if something goes wrong or timeout occurs
*/
public abstract void waitForRegionServerToStop(ServerName serverName, long timeout)
- throws IOException;
+ throws IOException;
/**
* Suspend the region server
@@ -163,23 +161,23 @@
public abstract void resumeRegionServer(ServerName serverName) throws IOException;
/**
- * Starts a new zookeeper node on the given hostname or if this is a mini/local cluster,
- * silently logs warning message.
+ * Starts a new zookeeper node on the given hostname or if this is a mini/local cluster, silently
+ * logs warning message.
* @param hostname the hostname to start the regionserver on
* @throws IOException if something goes wrong
*/
public abstract void startZkNode(String hostname, int port) throws IOException;
/**
- * Kills the zookeeper node process if this is a distributed cluster, otherwise,
- * this causes master to exit doing basic clean up only.
+ * Kills the zookeeper node process if this is a distributed cluster, otherwise, this causes
+ * master to exit doing basic clean up only.
* @throws IOException if something goes wrong
*/
public abstract void killZkNode(ServerName serverName) throws IOException;
/**
- * Stops the region zookeeper if this is a distributed cluster, otherwise
- * silently logs warning message.
+ * Stops the region zookeeper if this is a distributed cluster, otherwise silently logs warning
+ * message.
* @throws IOException if something goes wrong
*/
public abstract void stopZkNode(ServerName serverName) throws IOException;
@@ -188,33 +186,30 @@
* Wait for the specified zookeeper node to join the cluster
* @throws IOException if something goes wrong or timeout occurs
*/
- public abstract void waitForZkNodeToStart(ServerName serverName, long timeout)
- throws IOException;
+ public abstract void waitForZkNodeToStart(ServerName serverName, long timeout) throws IOException;
/**
* Wait for the specified zookeeper node to stop the thread / process.
* @throws IOException if something goes wrong or timeout occurs
*/
- public abstract void waitForZkNodeToStop(ServerName serverName, long timeout)
- throws IOException;
+ public abstract void waitForZkNodeToStop(ServerName serverName, long timeout) throws IOException;
/**
- * Starts a new datanode on the given hostname or if this is a mini/local cluster,
- * silently logs warning message.
+ * Starts a new datanode on the given hostname or if this is a mini/local cluster, silently logs
+ * warning message.
* @throws IOException if something goes wrong
*/
public abstract void startDataNode(ServerName serverName) throws IOException;
/**
- * Kills the datanode process if this is a distributed cluster, otherwise,
- * this causes master to exit doing basic clean up only.
+ * Kills the datanode process if this is a distributed cluster, otherwise, this causes master to
+ * exit doing basic clean up only.
* @throws IOException if something goes wrong
*/
public abstract void killDataNode(ServerName serverName) throws IOException;
/**
- * Stops the datanode if this is a distributed cluster, otherwise
- * silently logs warning message.
+ * Stops the datanode if this is a distributed cluster, otherwise silently logs warning message.
* @throws IOException if something goes wrong
*/
public abstract void stopDataNode(ServerName serverName) throws IOException;
@@ -258,26 +253,26 @@
* @throws IOException if something goes wrong or timeout occurs
*/
public abstract void waitForNameNodeToStart(ServerName serverName, long timeout)
- throws IOException;
+ throws IOException;
/**
* Wait for the specified namenode to stop
* @throws IOException if something goes wrong or timeout occurs
*/
public abstract void waitForNameNodeToStop(ServerName serverName, long timeout)
- throws IOException;
+ throws IOException;
/**
- * Starts a new master on the given hostname or if this is a mini/local cluster,
- * starts a master locally.
+ * Starts a new master on the given hostname or if this is a mini/local cluster, starts a master
+ * locally.
* @param hostname the hostname to start the master on
* @throws IOException if something goes wrong
*/
public abstract void startMaster(String hostname, int port) throws IOException;
/**
- * Kills the master process if this is a distributed cluster, otherwise,
- * this causes master to exit doing basic clean up only.
+ * Kills the master process if this is a distributed cluster, otherwise, this causes master to
+ * exit doing basic clean up only.
* @throws IOException if something goes wrong
*/
public abstract void killMaster(ServerName serverName) throws IOException;
@@ -292,31 +287,23 @@
* Wait for the specified master to stop the thread / process.
* @throws IOException if something goes wrong or timeout occurs
*/
- public abstract void waitForMasterToStop(ServerName serverName, long timeout)
- throws IOException;
+ public abstract void waitForMasterToStop(ServerName serverName, long timeout) throws IOException;
/**
- * Blocks until there is an active master and that master has completed
- * initialization.
- *
- * @return true if an active master becomes available. false if there are no
- * masters left.
+ * Blocks until there is an active master and that master has completed initialization.
+ * @return true if an active master becomes available. false if there are no masters left.
* @throws IOException if something goes wrong or timeout occurs
*/
- public boolean waitForActiveAndReadyMaster()
- throws IOException {
+ public boolean waitForActiveAndReadyMaster() throws IOException {
return waitForActiveAndReadyMaster(Long.MAX_VALUE);
}
/**
- * Blocks until there is an active master and that master has completed
- * initialization.
+ * Blocks until there is an active master and that master has completed initialization.
* @param timeout the timeout limit in ms
- * @return true if an active master becomes available. false if there are no
- * masters left.
+ * @return true if an active master becomes available. false if there are no masters left.
*/
- public abstract boolean waitForActiveAndReadyMaster(long timeout)
- throws IOException;
+ public abstract boolean waitForActiveAndReadyMaster(long timeout) throws IOException;
/**
* Wait for HBase Cluster to shut down.
@@ -329,10 +316,9 @@
public abstract void shutdown() throws IOException;
/**
- * Restores the cluster to it's initial state if this is a real cluster,
- * otherwise does nothing.
- * This is a best effort restore. If the servers are not reachable, or insufficient
- * permissions, etc. restoration might be partial.
+ * Restores the cluster to it's initial state if this is a real cluster, otherwise does nothing.
+ * This is a best effort restore. If the servers are not reachable, or insufficient permissions,
+ * etc. restoration might be partial.
* @return whether restoration is complete
*/
public boolean restoreInitialStatus() throws IOException {
@@ -340,10 +326,9 @@
}
/**
- * Restores the cluster to given state if this is a real cluster,
- * otherwise does nothing.
- * This is a best effort restore. If the servers are not reachable, or insufficient
- * permissions, etc. restoration might be partial.
+ * Restores the cluster to given state if this is a real cluster, otherwise does nothing. This is
+ * a best effort restore. If the servers are not reachable, or insufficient permissions, etc.
+ * restoration might be partial.
* @return whether restoration is complete
*/
public boolean restoreClusterMetrics(ClusterMetrics desiredStatus) throws IOException {
@@ -365,19 +350,19 @@
* @return ServerName that hosts the region or null
*/
public abstract ServerName getServerHoldingRegion(final TableName tn, byte[] regionName)
- throws IOException;
+ throws IOException;
/**
- * @return whether we are interacting with a distributed cluster as opposed to an
- * in-process mini/local cluster.
+ * @return whether we are interacting with a distributed cluster as opposed to an in-process
+ * mini/local cluster.
*/
public boolean isDistributedCluster() {
return false;
}
/**
- * Closes all the resources held open for this cluster. Note that this call does not shutdown
- * the cluster.
+ * Closes all the resources held open for this cluster. Note that this call does not shutdown the
+ * cluster.
* @see #shutdown()
*/
@Override
@@ -385,8 +370,6 @@
/**
* Wait for the namenode.
- *
- * @throws InterruptedException
*/
public void waitForNamenodeAvailable() throws InterruptedException {
}
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/HBaseTestingUtil.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/HBaseTestingUtil.java
index 1979732..37a255b 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/HBaseTestingUtil.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/HBaseTestingUtil.java
@@ -156,20 +156,23 @@
import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;
/**
- * Facility for testing HBase. Replacement for
- * old HBaseTestCase and HBaseClusterTestCase functionality.
- * Create an instance and keep it around testing HBase. This class is
- * meant to be your one-stop shop for anything you might need testing. Manages
- * one cluster at a time only. Managed cluster can be an in-process
- * {@link SingleProcessHBaseCluster}, or a deployed cluster of type {@code DistributedHBaseCluster}.
- * Not all methods work with the real cluster.
- * Depends on log4j being on classpath and
- * hbase-site.xml for logging and test-run configuration. It does not set
- * logging levels.
- * In the configuration properties, default values for master-info-port and
- * region-server-port are overridden such that a random port will be assigned (thus
- * avoiding port contention if another local HBase instance is already running).
- * <p>To preserve test data directories, pass the system property "hbase.testing.preserve.testdir"
+ * Facility for testing HBase. Replacement for old HBaseTestCase and HBaseClusterTestCase
+ * functionality. Create an instance and keep it around testing HBase.
+ * <p/>
+ * This class is meant to be your one-stop shop for anything you might need testing. Manages one
+ * cluster at a time only. Managed cluster can be an in-process {@link SingleProcessHBaseCluster},
+ * or a deployed cluster of type {@code DistributedHBaseCluster}. Not all methods work with the real
+ * cluster.
+ * <p/>
+ * Depends on log4j being on classpath and hbase-site.xml for logging and test-run configuration.
+ * <p/>
+ * It does not set logging levels.
+ * <p/>
+ * In the configuration properties, default values for master-info-port and region-server-port are
+ * overridden such that a random port will be assigned (thus avoiding port contention if another
+ * local HBase instance is already running).
+ * <p/>
+ * To preserve test data directories, pass the system property "hbase.testing.preserve.testdir"
* setting it to true.
*/
@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.PHOENIX)
@@ -188,12 +191,10 @@
public static final String REGIONS_PER_SERVER_KEY = "hbase.test.regions-per-server";
/**
- * The default number of regions per regionserver when creating a pre-split
- * table.
+ * The default number of regions per regionserver when creating a pre-split table.
*/
public static final int DEFAULT_REGIONS_PER_SERVER = 3;
-
public static final String PRESPLIT_TEST_TABLE_KEY = "hbase.test.pre-split-table";
public static final boolean PRESPLIT_TEST_TABLE = true;
@@ -207,8 +208,9 @@
private String hadoopLogDir;
- /** Directory on test filesystem where we put the data for this instance of
- * HBaseTestingUtility*/
+ /**
+ * Directory on test filesystem where we put the data for this instance of HBaseTestingUtility
+ */
private Path dataTestDirOnTestFS = null;
private final AtomicReference<AsyncClusterConnection> asyncConnection = new AtomicReference<>();
@@ -221,7 +223,6 @@
/**
* Checks to see if a specific port is available.
- *
* @param port the port number to check for availability
* @return <tt>true</tt> if the port is available, or <tt>false</tt> if not
*/
@@ -254,13 +255,11 @@
}
/**
- * Create all combinations of Bloom filters and compression algorithms for
- * testing.
+ * Create all combinations of Bloom filters and compression algorithms for testing.
*/
private static List<Object[]> bloomAndCompressionCombinations() {
List<Object[]> configurations = new ArrayList<>();
- for (Compression.Algorithm comprAlgo :
- HBaseCommonTestingUtil.COMPRESSION_ALGORITHMS) {
+ for (Compression.Algorithm comprAlgo : HBaseCommonTestingUtil.COMPRESSION_ALGORITHMS) {
for (BloomType bloomType : BloomType.values()) {
configurations.add(new Object[] { comprAlgo, bloomType });
}
@@ -294,27 +293,27 @@
}
public static final Collection<Object[]> BLOOM_AND_COMPRESSION_COMBINATIONS =
- bloomAndCompressionCombinations();
-
+ bloomAndCompressionCombinations();
/**
- * <p>Create an HBaseTestingUtility using a default configuration.
- *
- * <p>Initially, all tmp files are written to a local test data directory.
- * Once {@link #startMiniDFSCluster} is called, either directly or via
- * {@link #startMiniCluster()}, tmp data will be written to the DFS directory instead.
+ * <p>
+ * Create an HBaseTestingUtility using a default configuration.
+ * <p>
+ * Initially, all tmp files are written to a local test data directory. Once
+ * {@link #startMiniDFSCluster} is called, either directly or via {@link #startMiniCluster()}, tmp
+ * data will be written to the DFS directory instead.
*/
public HBaseTestingUtil() {
this(HBaseConfiguration.create());
}
/**
- * <p>Create an HBaseTestingUtility using a given configuration.
- *
- * <p>Initially, all tmp files are written to a local test data directory.
- * Once {@link #startMiniDFSCluster} is called, either directly or via
- * {@link #startMiniCluster()}, tmp data will be written to the DFS directory instead.
- *
+ * <p>
+ * Create an HBaseTestingUtility using a given configuration.
+ * <p>
+ * Initially, all tmp files are written to a local test data directory. Once
+ * {@link #startMiniDFSCluster} is called, either directly or via {@link #startMiniCluster()}, tmp
+ * data will be written to the DFS directory instead.
* @param conf The configuration to use for further operations
*/
public HBaseTestingUtil(@Nullable Configuration conf) {
@@ -333,21 +332,21 @@
// Every cluster is a local cluster until we start DFS
// Note that conf could be null, but this.conf will not be
String dataTestDir = getDataTestDir().toString();
- this.conf.set("fs.defaultFS","file:///");
+ this.conf.set("fs.defaultFS", "file:///");
this.conf.set(HConstants.HBASE_DIR, "file://" + dataTestDir);
LOG.debug("Setting {} to {}", HConstants.HBASE_DIR, dataTestDir);
- this.conf.setBoolean(CommonFSUtils.UNSAFE_STREAM_CAPABILITY_ENFORCE,false);
+ this.conf.setBoolean(CommonFSUtils.UNSAFE_STREAM_CAPABILITY_ENFORCE, false);
// If the value for random ports isn't set set it to true, thus making
// tests opt-out for random port assignment
this.conf.setBoolean(LocalHBaseCluster.ASSIGN_RANDOM_PORTS,
- this.conf.getBoolean(LocalHBaseCluster.ASSIGN_RANDOM_PORTS, true));
+ this.conf.getBoolean(LocalHBaseCluster.ASSIGN_RANDOM_PORTS, true));
}
/**
* Close both the region {@code r} and it's underlying WAL. For use in tests.
*/
public static void closeRegionAndWAL(final Region r) throws IOException {
- closeRegionAndWAL((HRegion)r);
+ closeRegionAndWAL((HRegion) r);
}
/**
@@ -361,13 +360,11 @@
}
/**
- * Returns this classes's instance of {@link Configuration}. Be careful how
- * you use the returned Configuration since {@link Connection} instances
- * can be shared. The Map of Connections is keyed by the Configuration. If
- * say, a Connection was being used against a cluster that had been shutdown,
- * see {@link #shutdownMiniCluster()}, then the Connection will no longer
- * be wholesome. Rather than use the return direct, its usually best to
- * make a copy and use that. Do
+ * Returns this classes's instance of {@link Configuration}. Be careful how you use the returned
+ * Configuration since {@link Connection} instances can be shared. The Map of Connections is keyed
+ * by the Configuration. If say, a Connection was being used against a cluster that had been
+ * shutdown, see {@link #shutdownMiniCluster()}, then the Connection will no longer be wholesome.
+ * Rather than use the return direct, its usually best to make a copy and use that. Do
* <code>Configuration c = new Configuration(INSTANCE.getConfiguration());</code>
* @return Instance of Configuration.
*/
@@ -381,19 +378,14 @@
}
/**
- * Home our data in a dir under {@link #DEFAULT_BASE_TEST_DIRECTORY}.
- * Give it a random name so can have many concurrent tests running if
- * we need to. It needs to amend the {@link #TEST_DIRECTORY_KEY}
- * System property, as it's what minidfscluster bases
- * it data dir on. Moding a System property is not the way to do concurrent
- * instances -- another instance could grab the temporary
- * value unintentionally -- but not anything can do about it at moment;
- * single instance only is how the minidfscluster works.
- *
- * We also create the underlying directory names for
- * hadoop.log.dir, mapreduce.cluster.local.dir and hadoop.tmp.dir, and set the values
- * in the conf, and as a system property for hadoop.tmp.dir (We do not create them!).
- *
+ * Home our data in a dir under {@link #DEFAULT_BASE_TEST_DIRECTORY}. Give it a random name so can
+ * have many concurrent tests running if we need to. It needs to amend the
+ * {@link #TEST_DIRECTORY_KEY} System property, as it's what minidfscluster bases it data dir on.
+ * Moding a System property is not the way to do concurrent instances -- another instance could
+ * grab the temporary value unintentionally -- but not anything can do about it at moment; single
+ * instance only is how the minidfscluster works. We also create the underlying directory names
+ * for hadoop.log.dir, mapreduce.cluster.local.dir and hadoop.tmp.dir, and set the values in the
+ * conf, and as a system property for hadoop.tmp.dir (We do not create them!).
* @return The calculated data test build directory, if newly-created.
*/
@Override
@@ -403,40 +395,31 @@
return null;
}
- createSubDirAndSystemProperty(
- "hadoop.log.dir",
- testPath, "hadoop-log-dir");
+ createSubDirAndSystemProperty("hadoop.log.dir", testPath, "hadoop-log-dir");
// This is defaulted in core-default.xml to /tmp/hadoop-${user.name}, but
- // we want our own value to ensure uniqueness on the same machine
- createSubDirAndSystemProperty(
- "hadoop.tmp.dir",
- testPath, "hadoop-tmp-dir");
+ // we want our own value to ensure uniqueness on the same machine
+ createSubDirAndSystemProperty("hadoop.tmp.dir", testPath, "hadoop-tmp-dir");
// Read and modified in org.apache.hadoop.mapred.MiniMRCluster
- createSubDir(
- "mapreduce.cluster.local.dir",
- testPath, "mapred-local-dir");
+ createSubDir("mapreduce.cluster.local.dir", testPath, "mapred-local-dir");
return testPath;
}
- private void createSubDirAndSystemProperty(
- String propertyName, Path parent, String subDirName){
+ private void createSubDirAndSystemProperty(String propertyName, Path parent, String subDirName) {
String sysValue = System.getProperty(propertyName);
if (sysValue != null) {
// There is already a value set. So we do nothing but hope
- // that there will be no conflicts
- LOG.info("System.getProperty(\""+propertyName+"\") already set to: "+
- sysValue + " so I do NOT create it in " + parent);
+ // that there will be no conflicts
+ LOG.info("System.getProperty(\"" + propertyName + "\") already set to: " + sysValue +
+ " so I do NOT create it in " + parent);
String confValue = conf.get(propertyName);
- if (confValue != null && !confValue.endsWith(sysValue)){
- LOG.warn(
- propertyName + " property value differs in configuration and system: "+
- "Configuration="+confValue+" while System="+sysValue+
- " Erasing configuration value by system value."
- );
+ if (confValue != null && !confValue.endsWith(sysValue)) {
+ LOG.warn(propertyName + " property value differs in configuration and system: " +
+ "Configuration=" + confValue + " while System=" + sysValue +
+ " Erasing configuration value by system value.");
}
conf.set(propertyName, sysValue);
} else {
@@ -447,8 +430,8 @@
}
/**
- * @return Where to write test data on the test filesystem; Returns working directory
- * for the test filesystem by default
+ * @return Where to write test data on the test filesystem; Returns working directory for the test
+ * filesystem by default
* @see #setupDataTestDirOnTestFS()
* @see #getTestFileSystem()
*/
@@ -458,9 +441,9 @@
}
/**
- * Returns a Path in the test filesystem, obtained from {@link #getTestFileSystem()}
- * to write temporary test data. Call this method after setting up the mini dfs cluster
- * if the test relies on it.
+ * Returns a Path in the test filesystem, obtained from {@link #getTestFileSystem()} to write
+ * temporary test data. Call this method after setting up the mini dfs cluster if the test relies
+ * on it.
* @return a unique path in the test filesystem
*/
public Path getDataTestDirOnTestFS() throws IOException {
@@ -472,9 +455,9 @@
}
/**
- * Returns a Path in the test filesystem, obtained from {@link #getTestFileSystem()}
- * to write temporary test data. Call this method after setting up the mini dfs cluster
- * if the test relies on it.
+ * Returns a Path in the test filesystem, obtained from {@link #getTestFileSystem()} to write
+ * temporary test data. Call this method after setting up the mini dfs cluster if the test relies
+ * on it.
* @return a unique path in the test filesystem
* @param subdirName name of the subdir to create under the base test dir
*/
@@ -483,13 +466,12 @@
}
/**
- * Sets up a path in test filesystem to be used by tests.
- * Creates a new directory if not already setup.
+ * Sets up a path in test filesystem to be used by tests. Creates a new directory if not already
+ * setup.
*/
private void setupDataTestDirOnTestFS() throws IOException {
if (dataTestDirOnTestFS != null) {
- LOG.warn("Data test on test fs dir already setup in "
- + dataTestDirOnTestFS.toString());
+ LOG.warn("Data test on test fs dir already setup in " + dataTestDirOnTestFS.toString());
return;
}
dataTestDirOnTestFS = getNewDataTestDirOnTestFS();
@@ -499,10 +481,10 @@
* Sets up a new path in test filesystem to be used by tests.
*/
private Path getNewDataTestDirOnTestFS() throws IOException {
- //The file system can be either local, mini dfs, or if the configuration
- //is supplied externally, it can be an external cluster FS. If it is a local
- //file system, the tests should use getBaseTestDir, otherwise, we can use
- //the working directory, and create a unique sub dir there
+ // The file system can be either local, mini dfs, or if the configuration
+ // is supplied externally, it can be an external cluster FS. If it is a local
+ // file system, the tests should use getBaseTestDir, otherwise, we can use
+ // the working directory, and create a unique sub dir there
FileSystem fs = getTestFileSystem();
Path newDataTestDir;
String randomStr = getRandomUUID().toString();
@@ -521,19 +503,18 @@
/**
* Cleans the test data directory on the test filesystem.
* @return True if we removed the test dirs
- * @throws IOException
*/
public boolean cleanupDataTestDirOnTestFS() throws IOException {
boolean ret = getTestFileSystem().delete(dataTestDirOnTestFS, true);
- if (ret)
+ if (ret) {
dataTestDirOnTestFS = null;
+ }
return ret;
}
/**
* Cleans a subdirectory under the test data directory on the test filesystem.
* @return True if we removed child
- * @throws IOException
*/
public boolean cleanupDataTestDirOnTestFS(String subdirName) throws IOException {
Path cpath = getDataTestDirOnTestFS(subdirName);
@@ -543,7 +524,6 @@
/**
* Start a minidfscluster.
* @param servers How many DNs to start.
- * @throws Exception
* @see #shutdownMiniDFSCluster()
* @return The mini dfs cluster created.
*/
@@ -552,19 +532,16 @@
}
/**
- * Start a minidfscluster.
- * This is useful if you want to run datanode on distinct hosts for things
- * like HDFS block location verification.
- * If you start MiniDFSCluster without host names, all instances of the
- * datanodes will have the same host name.
+ * Start a minidfscluster. This is useful if you want to run datanode on distinct hosts for things
+ * like HDFS block location verification. If you start MiniDFSCluster without host names, all
+ * instances of the datanodes will have the same host name.
* @param hosts hostnames DNs to run on.
* @throws Exception
* @see #shutdownMiniDFSCluster()
* @return The mini dfs cluster created.
*/
- public MiniDFSCluster startMiniDFSCluster(final String hosts[])
- throws Exception {
- if ( hosts != null && hosts.length != 0) {
+ public MiniDFSCluster startMiniDFSCluster(final String[] hosts) throws Exception {
+ if (hosts != null && hosts.length != 0) {
return startMiniDFSCluster(hosts.length, hosts);
} else {
return startMiniDFSCluster(1, null);
@@ -572,21 +549,19 @@
}
/**
- * Start a minidfscluster.
- * Can only create one.
+ * Start a minidfscluster. Can only create one.
* @param servers How many DNs to start.
* @param hosts hostnames DNs to run on.
* @throws Exception
* @see #shutdownMiniDFSCluster()
* @return The mini dfs cluster created.
*/
- public MiniDFSCluster startMiniDFSCluster(int servers, final String hosts[])
- throws Exception {
+ public MiniDFSCluster startMiniDFSCluster(int servers, final String[] hosts) throws Exception {
return startMiniDFSCluster(servers, null, hosts);
}
private void setFs() throws IOException {
- if(this.dfsCluster == null){
+ if (this.dfsCluster == null) {
LOG.info("Skipping setting fs because dfsCluster is null");
return;
}
@@ -597,8 +572,8 @@
conf.unset(CommonFSUtils.UNSAFE_STREAM_CAPABILITY_ENFORCE);
}
- public MiniDFSCluster startMiniDFSCluster(int servers, final String racks[], String hosts[])
- throws Exception {
+ public MiniDFSCluster startMiniDFSCluster(int servers, final String[] racks, String[] hosts)
+ throws Exception {
createDirsAndSetProperties();
EditLogFileOutputStream.setShouldSkipFsyncForTesting(true);
@@ -606,9 +581,8 @@
Log4jUtils.setLogLevel(org.apache.hadoop.metrics2.util.MBeans.class.getName(), "ERROR");
Log4jUtils.setLogLevel(org.apache.hadoop.metrics2.impl.MetricsSystemImpl.class.getName(),
"ERROR");
-
this.dfsCluster = new MiniDFSCluster(0, this.conf, servers, true, true,
- true, null, racks, hosts, null);
+ true, null, racks, hosts, null);
// Set this just-started cluster as our filesystem.
setFs();
@@ -616,7 +590,7 @@
// Wait for the cluster to be totally up
this.dfsCluster.waitClusterUp();
- //reset the test directory for test file system
+ // reset the test directory for test file system
dataTestDirOnTestFS = null;
String dataTestDir = getDataTestDir().toString();
conf.set(HConstants.HBASE_DIR, dataTestDir);
@@ -632,7 +606,7 @@
Log4jUtils.setLogLevel(org.apache.hadoop.metrics2.impl.MetricsSystemImpl.class.getName(),
"ERROR");
dfsCluster = new MiniDFSCluster(namenodePort, conf, 5, false, true, true, null,
- null, null, null);
+ null, null, null);
return dfsCluster;
}
@@ -640,6 +614,7 @@
* This is used before starting HDFS and map-reduce mini-clusters Run something like the below to
* check for the likes of '/tmp' references -- i.e. references outside of the test data dir -- in
* the conf.
+ *
* <pre>
* Configuration conf = TEST_UTIL.getConfiguration();
* for (Iterator<Map.Entry<String, String>> i = conf.iterator(); i.hasNext();) {
@@ -688,35 +663,35 @@
}
/**
- * Check whether the tests should assume NEW_VERSION_BEHAVIOR when creating
- * new column families. Default to false.
+ * Check whether the tests should assume NEW_VERSION_BEHAVIOR when creating new column families.
+ * Default to false.
*/
- public boolean isNewVersionBehaviorEnabled(){
+ public boolean isNewVersionBehaviorEnabled() {
final String propName = "hbase.tests.new.version.behavior";
String v = System.getProperty(propName);
- if (v != null){
+ if (v != null) {
return Boolean.parseBoolean(v);
}
return false;
}
/**
- * Get the HBase setting for dfs.client.read.shortcircuit from the conf or a system property.
- * This allows to specify this parameter on the command line.
- * If not set, default is true.
+ * Get the HBase setting for dfs.client.read.shortcircuit from the conf or a system property. This
+ * allows to specify this parameter on the command line. If not set, default is true.
*/
- public boolean isReadShortCircuitOn(){
+ public boolean isReadShortCircuitOn() {
final String propName = "hbase.tests.use.shortcircuit.reads";
String readOnProp = System.getProperty(propName);
- if (readOnProp != null){
- return Boolean.parseBoolean(readOnProp);
+ if (readOnProp != null) {
+ return Boolean.parseBoolean(readOnProp);
} else {
return conf.getBoolean(propName, false);
}
}
- /** Enable the short circuit read, unless configured differently.
- * Set both HBase and HDFS settings, including skipping the hdfs checksum checks.
+ /**
+ * Enable the short circuit read, unless configured differently. Set both HBase and HDFS settings,
+ * including skipping the hdfs checksum checks.
*/
private void enableShortCircuit() {
if (isReadShortCircuitOn()) {
@@ -747,9 +722,7 @@
}
/**
- * Shuts down instance created by call to {@link #startMiniDFSCluster(int)}
- * or does nothing.
- * @throws IOException
+ * Shuts down instance created by call to {@link #startMiniDFSCluster(int)} or does nothing.
*/
public void shutdownMiniDFSCluster() throws IOException {
if (this.dfsCluster != null) {
@@ -762,269 +735,6 @@
}
/**
- * Start up a minicluster of hbase, dfs, and zookeeper where WAL's walDir is created separately.
- * All other options will use default values, defined in
- * {@link StartTestingClusterOption.Builder}.
- * @param createWALDir Whether to create a new WAL directory.
- * @return The mini HBase cluster created.
- * @see #shutdownMiniCluster()
- * @deprecated since 2.2.0 and will be removed in 4.0.0. Use
- * {@link #startMiniCluster(StartTestingClusterOption)} instead.
- * @see #startMiniCluster(StartTestingClusterOption)
- * @see <a href="https://issues.apache.org/jira/browse/HBASE-21071">HBASE-21071</a>
- */
- @Deprecated
- public SingleProcessHBaseCluster startMiniCluster(boolean createWALDir) throws Exception {
- StartTestingClusterOption option = StartTestingClusterOption.builder()
- .createWALDir(createWALDir).build();
- return startMiniCluster(option);
- }
-
- /**
- * Start up a minicluster of hbase, dfs, and zookeeper. All other options will use default values,
- * defined in {@link StartTestingClusterOption.Builder}.
- * @param numSlaves Slave node number, for both HBase region server and HDFS data node.
- * @param createRootDir Whether to create a new root or data directory path.
- * @return The mini HBase cluster created.
- * @see #shutdownMiniCluster()
- * @deprecated since 2.2.0 and will be removed in 4.0.0. Use
- * {@link #startMiniCluster(StartTestingClusterOption)} instead.
- * @see #startMiniCluster(StartTestingClusterOption)
- * @see <a href="https://issues.apache.org/jira/browse/HBASE-21071">HBASE-21071</a>
- */
- @Deprecated
- public SingleProcessHBaseCluster startMiniCluster(int numSlaves, boolean createRootDir)
- throws Exception {
- StartTestingClusterOption option = StartTestingClusterOption.builder()
- .numRegionServers(numSlaves).numDataNodes(numSlaves).createRootDir(createRootDir).build();
- return startMiniCluster(option);
- }
-
- /**
- * Start up a minicluster of hbase, dfs, and zookeeper. All other options will use default values,
- * defined in {@link StartTestingClusterOption.Builder}.
- * @param numSlaves Slave node number, for both HBase region server and HDFS data node.
- * @param createRootDir Whether to create a new root or data directory path.
- * @param createWALDir Whether to create a new WAL directory.
- * @return The mini HBase cluster created.
- * @see #shutdownMiniCluster()
- * @deprecated since 2.2.0 and will be removed in 4.0.0. Use
- * {@link #startMiniCluster(StartTestingClusterOption)} instead.
- * @see #startMiniCluster(StartTestingClusterOption)
- * @see <a href="https://issues.apache.org/jira/browse/HBASE-21071">HBASE-21071</a>
- */
- @Deprecated
- public SingleProcessHBaseCluster startMiniCluster(int numSlaves, boolean createRootDir,
- boolean createWALDir) throws Exception {
- StartTestingClusterOption option = StartTestingClusterOption.builder()
- .numRegionServers(numSlaves).numDataNodes(numSlaves).createRootDir(createRootDir)
- .createWALDir(createWALDir).build();
- return startMiniCluster(option);
- }
-
- /**
- * Start up a minicluster of hbase, dfs, and zookeeper. All other options will use default values,
- * defined in {@link StartTestingClusterOption.Builder}.
- * @param numMasters Master node number.
- * @param numSlaves Slave node number, for both HBase region server and HDFS data node.
- * @param createRootDir Whether to create a new root or data directory path.
- * @return The mini HBase cluster created.
- * @see #shutdownMiniCluster()
- * @deprecated since 2.2.0 and will be removed in 4.0.0. Use
- * {@link #startMiniCluster(StartTestingClusterOption)} instead.
- * @see #startMiniCluster(StartTestingClusterOption)
- * @see <a href="https://issues.apache.org/jira/browse/HBASE-21071">HBASE-21071</a>
- */
- @Deprecated
- public SingleProcessHBaseCluster startMiniCluster(int numMasters, int numSlaves, boolean createRootDir)
- throws Exception {
- StartTestingClusterOption option = StartTestingClusterOption.builder()
- .numMasters(numMasters).numRegionServers(numSlaves).createRootDir(createRootDir)
- .numDataNodes(numSlaves).build();
- return startMiniCluster(option);
- }
-
- /**
- * Start up a minicluster of hbase, dfs, and zookeeper. All other options will use default values,
- * defined in {@link StartTestingClusterOption.Builder}.
- * @param numMasters Master node number.
- * @param numSlaves Slave node number, for both HBase region server and HDFS data node.
- * @return The mini HBase cluster created.
- * @see #shutdownMiniCluster()
- * @deprecated since 2.2.0 and will be removed in 4.0.0. Use
- * {@link #startMiniCluster(StartTestingClusterOption)} instead.
- * @see #startMiniCluster(StartTestingClusterOption)
- * @see <a href="https://issues.apache.org/jira/browse/HBASE-21071">HBASE-21071</a>
- */
- @Deprecated
- public SingleProcessHBaseCluster startMiniCluster(int numMasters, int numSlaves) throws Exception {
- StartTestingClusterOption option = StartTestingClusterOption.builder()
- .numMasters(numMasters).numRegionServers(numSlaves).numDataNodes(numSlaves).build();
- return startMiniCluster(option);
- }
-
- /**
- * Start up a minicluster of hbase, dfs, and zookeeper. All other options will use default values,
- * defined in {@link StartTestingClusterOption.Builder}.
- * @param numMasters Master node number.
- * @param numSlaves Slave node number, for both HBase region server and HDFS data node.
- * @param dataNodeHosts The hostnames of DataNodes to run on. If not null, its size will overwrite
- * HDFS data node number.
- * @param createRootDir Whether to create a new root or data directory path.
- * @return The mini HBase cluster created.
- * @see #shutdownMiniCluster()
- * @deprecated since 2.2.0 and will be removed in 4.0.0. Use
- * {@link #startMiniCluster(StartTestingClusterOption)} instead.
- * @see #startMiniCluster(StartTestingClusterOption)
- * @see <a href="https://issues.apache.org/jira/browse/HBASE-21071">HBASE-21071</a>
- */
- @Deprecated
- public SingleProcessHBaseCluster startMiniCluster(int numMasters, int numSlaves, String[] dataNodeHosts,
- boolean createRootDir) throws Exception {
- StartTestingClusterOption option = StartTestingClusterOption.builder()
- .numMasters(numMasters).numRegionServers(numSlaves).createRootDir(createRootDir)
- .numDataNodes(numSlaves).dataNodeHosts(dataNodeHosts).build();
- return startMiniCluster(option);
- }
-
- /**
- * Start up a minicluster of hbase, dfs, and zookeeper. All other options will use default values,
- * defined in {@link StartTestingClusterOption.Builder}.
- * @param numMasters Master node number.
- * @param numSlaves Slave node number, for both HBase region server and HDFS data node.
- * @param dataNodeHosts The hostnames of DataNodes to run on. If not null, its size will overwrite
- * HDFS data node number.
- * @return The mini HBase cluster created.
- * @see #shutdownMiniCluster()
- * @deprecated since 2.2.0 and will be removed in 4.0.0. Use
- * {@link #startMiniCluster(StartTestingClusterOption)} instead.
- * @see #startMiniCluster(StartTestingClusterOption)
- * @see <a href="https://issues.apache.org/jira/browse/HBASE-21071">HBASE-21071</a>
- */
- @Deprecated
- public SingleProcessHBaseCluster startMiniCluster(int numMasters, int numSlaves, String[] dataNodeHosts)
- throws Exception {
- StartTestingClusterOption option = StartTestingClusterOption.builder()
- .numMasters(numMasters).numRegionServers(numSlaves)
- .numDataNodes(numSlaves).dataNodeHosts(dataNodeHosts).build();
- return startMiniCluster(option);
- }
-
- /**
- * Start up a minicluster of hbase, dfs, and zookeeper. All other options will use default values,
- * defined in {@link StartTestingClusterOption.Builder}.
- * @param numMasters Master node number.
- * @param numRegionServers Number of region servers.
- * @param numDataNodes Number of datanodes.
- * @return The mini HBase cluster created.
- * @see #shutdownMiniCluster()
- * @deprecated since 2.2.0 and will be removed in 4.0.0. Use
- * {@link #startMiniCluster(StartTestingClusterOption)} instead.
- * @see #startMiniCluster(StartTestingClusterOption)
- * @see <a href="https://issues.apache.org/jira/browse/HBASE-21071">HBASE-21071</a>
- */
- @Deprecated
- public SingleProcessHBaseCluster startMiniCluster(int numMasters, int numRegionServers, int numDataNodes)
- throws Exception {
- StartTestingClusterOption option = StartTestingClusterOption.builder()
- .numMasters(numMasters).numRegionServers(numRegionServers).numDataNodes(numDataNodes)
- .build();
- return startMiniCluster(option);
- }
-
- /**
- * Start up a minicluster of hbase, dfs, and zookeeper. All other options will use default values,
- * defined in {@link StartTestingClusterOption.Builder}.
- * @param numMasters Master node number.
- * @param numSlaves Slave node number, for both HBase region server and HDFS data node.
- * @param dataNodeHosts The hostnames of DataNodes to run on. If not null, its size will overwrite
- * HDFS data node number.
- * @param masterClass The class to use as HMaster, or null for default.
- * @param rsClass The class to use as HRegionServer, or null for default.
- * @return The mini HBase cluster created.
- * @see #shutdownMiniCluster()
- * @deprecated since 2.2.0 and will be removed in 4.0.0. Use
- * {@link #startMiniCluster(StartTestingClusterOption)} instead.
- * @see #startMiniCluster(StartTestingClusterOption)
- * @see <a href="https://issues.apache.org/jira/browse/HBASE-21071">HBASE-21071</a>
- */
- @Deprecated
- public SingleProcessHBaseCluster startMiniCluster(int numMasters, int numSlaves, String[] dataNodeHosts,
- Class<? extends HMaster> masterClass,
- Class<? extends SingleProcessHBaseCluster.MiniHBaseClusterRegionServer> rsClass)
- throws Exception {
- StartTestingClusterOption option = StartTestingClusterOption.builder()
- .numMasters(numMasters).masterClass(masterClass)
- .numRegionServers(numSlaves).rsClass(rsClass)
- .numDataNodes(numSlaves).dataNodeHosts(dataNodeHosts)
- .build();
- return startMiniCluster(option);
- }
-
- /**
- * Start up a minicluster of hbase, dfs, and zookeeper. All other options will use default values,
- * defined in {@link StartTestingClusterOption.Builder}.
- * @param numMasters Master node number.
- * @param numRegionServers Number of region servers.
- * @param numDataNodes Number of datanodes.
- * @param dataNodeHosts The hostnames of DataNodes to run on. If not null, its size will overwrite
- * HDFS data node number.
- * @param masterClass The class to use as HMaster, or null for default.
- * @param rsClass The class to use as HRegionServer, or null for default.
- * @return The mini HBase cluster created.
- * @see #shutdownMiniCluster()
- * @deprecated since 2.2.0 and will be removed in 4.0.0. Use
- * {@link #startMiniCluster(StartTestingClusterOption)} instead.
- * @see #startMiniCluster(StartTestingClusterOption)
- * @see <a href="https://issues.apache.org/jira/browse/HBASE-21071">HBASE-21071</a>
- */
- @Deprecated
- public SingleProcessHBaseCluster startMiniCluster(int numMasters, int numRegionServers, int numDataNodes,
- String[] dataNodeHosts, Class<? extends HMaster> masterClass,
- Class<? extends SingleProcessHBaseCluster.MiniHBaseClusterRegionServer> rsClass)
- throws Exception {
- StartTestingClusterOption option = StartTestingClusterOption.builder()
- .numMasters(numMasters).masterClass(masterClass)
- .numRegionServers(numRegionServers).rsClass(rsClass)
- .numDataNodes(numDataNodes).dataNodeHosts(dataNodeHosts)
- .build();
- return startMiniCluster(option);
- }
-
- /**
- * Start up a minicluster of hbase, dfs, and zookeeper. All other options will use default values,
- * defined in {@link StartTestingClusterOption.Builder}.
- * @param numMasters Master node number.
- * @param numRegionServers Number of region servers.
- * @param numDataNodes Number of datanodes.
- * @param dataNodeHosts The hostnames of DataNodes to run on. If not null, its size will overwrite
- * HDFS data node number.
- * @param masterClass The class to use as HMaster, or null for default.
- * @param rsClass The class to use as HRegionServer, or null for default.
- * @param createRootDir Whether to create a new root or data directory path.
- * @param createWALDir Whether to create a new WAL directory.
- * @return The mini HBase cluster created.
- * @see #shutdownMiniCluster()
- * @deprecated since 2.2.0 and will be removed in 4.0.0. Use
- * {@link #startMiniCluster(StartTestingClusterOption)} instead.
- * @see #startMiniCluster(StartTestingClusterOption)
- * @see <a href="https://issues.apache.org/jira/browse/HBASE-21071">HBASE-21071</a>
- */
- @Deprecated
- public SingleProcessHBaseCluster startMiniCluster(int numMasters, int numRegionServers, int numDataNodes,
- String[] dataNodeHosts, Class<? extends HMaster> masterClass,
- Class<? extends SingleProcessHBaseCluster.MiniHBaseClusterRegionServer> rsClass, boolean createRootDir,
- boolean createWALDir) throws Exception {
- StartTestingClusterOption option = StartTestingClusterOption.builder()
- .numMasters(numMasters).masterClass(masterClass)
- .numRegionServers(numRegionServers).rsClass(rsClass)
- .numDataNodes(numDataNodes).dataNodeHosts(dataNodeHosts)
- .createRootDir(createRootDir).createWALDir(createWALDir)
- .build();
- return startMiniCluster(option);
- }
-
- /**
* Start up a minicluster of hbase, dfs and zookeeper clusters with given slave node number. All
* other options will use default values, defined in {@link StartTestingClusterOption.Builder}.
* @param numSlaves slave node number, for both HBase region server and HDFS data node.
@@ -1033,13 +743,13 @@
*/
public SingleProcessHBaseCluster startMiniCluster(int numSlaves) throws Exception {
StartTestingClusterOption option = StartTestingClusterOption.builder()
- .numRegionServers(numSlaves).numDataNodes(numSlaves).build();
+ .numRegionServers(numSlaves).numDataNodes(numSlaves).build();
return startMiniCluster(option);
}
/**
- * Start up a minicluster of hbase, dfs and zookeeper all using default options.
- * Option default value can be found in {@link StartTestingClusterOption.Builder}.
+ * Start up a minicluster of hbase, dfs and zookeeper all using default options. Option default
+ * value can be found in {@link StartTestingClusterOption.Builder}.
* @see #startMiniCluster(StartTestingClusterOption option)
* @see #shutdownMiniDFSCluster()
*/
@@ -1048,12 +758,13 @@
}
/**
- * Start up a mini cluster of hbase, optionally dfs and zookeeper if needed.
- * It modifies Configuration. It homes the cluster data directory under a random
- * subdirectory in a directory under System property test.build.data, to be cleaned up on exit.
+ * Start up a mini cluster of hbase, optionally dfs and zookeeper if needed. It modifies
+ * Configuration. It homes the cluster data directory under a random subdirectory in a directory
+ * under System property test.build.data, to be cleaned up on exit.
* @see #shutdownMiniDFSCluster()
*/
- public SingleProcessHBaseCluster startMiniCluster(StartTestingClusterOption option) throws Exception {
+ public SingleProcessHBaseCluster startMiniCluster(StartTestingClusterOption option)
+ throws Exception {
LOG.info("Starting up minicluster with option: {}", option);
// If we already put up a cluster, fail.
@@ -1129,7 +840,6 @@
}
}
-
getAdmin(); // create immediately the hbaseAdmin
LOG.info("Minicluster is up; activeMaster={}", getHBaseCluster().getMaster());
@@ -1137,12 +847,13 @@
}
/**
- * Starts up mini hbase cluster using default options.
- * Default options can be found in {@link StartTestingClusterOption.Builder}.
+ * Starts up mini hbase cluster using default options. Default options can be found in
+ * {@link StartTestingClusterOption.Builder}.
* @see #startMiniHBaseCluster(StartTestingClusterOption)
* @see #shutdownMiniHBaseCluster()
*/
- public SingleProcessHBaseCluster startMiniHBaseCluster() throws IOException, InterruptedException {
+ public SingleProcessHBaseCluster startMiniHBaseCluster()
+ throws IOException, InterruptedException {
return startMiniHBaseCluster(StartTestingClusterOption.builder().build());
}
@@ -1161,9 +872,9 @@
*/
@Deprecated
public SingleProcessHBaseCluster startMiniHBaseCluster(int numMasters, int numRegionServers)
- throws IOException, InterruptedException {
- StartTestingClusterOption option = StartTestingClusterOption.builder()
- .numMasters(numMasters).numRegionServers(numRegionServers).build();
+ throws IOException, InterruptedException {
+ StartTestingClusterOption option = StartTestingClusterOption.builder().numMasters(numMasters)
+ .numRegionServers(numRegionServers).build();
return startMiniHBaseCluster(option);
}
@@ -1183,9 +894,9 @@
*/
@Deprecated
public SingleProcessHBaseCluster startMiniHBaseCluster(int numMasters, int numRegionServers,
- List<Integer> rsPorts) throws IOException, InterruptedException {
- StartTestingClusterOption option = StartTestingClusterOption.builder()
- .numMasters(numMasters).numRegionServers(numRegionServers).rsPorts(rsPorts).build();
+ List<Integer> rsPorts) throws IOException, InterruptedException {
+ StartTestingClusterOption option = StartTestingClusterOption.builder().numMasters(numMasters)
+ .numRegionServers(numRegionServers).rsPorts(rsPorts).build();
return startMiniHBaseCluster(option);
}
@@ -1209,19 +920,18 @@
*/
@Deprecated
public SingleProcessHBaseCluster startMiniHBaseCluster(int numMasters, int numRegionServers,
- List<Integer> rsPorts, Class<? extends HMaster> masterClass,
- Class<? extends SingleProcessHBaseCluster.MiniHBaseClusterRegionServer> rsClass,
- boolean createRootDir, boolean createWALDir) throws IOException, InterruptedException {
- StartTestingClusterOption option = StartTestingClusterOption.builder()
- .numMasters(numMasters).masterClass(masterClass)
- .numRegionServers(numRegionServers).rsClass(rsClass).rsPorts(rsPorts)
- .createRootDir(createRootDir).createWALDir(createWALDir).build();
+ List<Integer> rsPorts, Class<? extends HMaster> masterClass,
+ Class<? extends SingleProcessHBaseCluster.MiniHBaseClusterRegionServer> rsClass,
+ boolean createRootDir, boolean createWALDir) throws IOException, InterruptedException {
+ StartTestingClusterOption option = StartTestingClusterOption.builder().numMasters(numMasters)
+ .masterClass(masterClass).numRegionServers(numRegionServers).rsClass(rsClass).rsPorts(rsPorts)
+ .createRootDir(createRootDir).createWALDir(createWALDir).build();
return startMiniHBaseCluster(option);
}
/**
- * Starts the hbase cluster up again after shutting it down previously in a
- * test. Use this if you want to keep dfs/zk up and just stop/start hbase.
+ * Starts the hbase cluster up again after shutting it down previously in a test. Use this if you
+ * want to keep dfs/zk up and just stop/start hbase.
* @param servers number of region servers
*/
public void restartHBaseCluster(int servers) throws IOException, InterruptedException {
@@ -1229,9 +939,9 @@
}
public void restartHBaseCluster(int servers, List<Integer> ports)
- throws IOException, InterruptedException {
+ throws IOException, InterruptedException {
StartTestingClusterOption option =
- StartTestingClusterOption.builder().numRegionServers(servers).rsPorts(ports).build();
+ StartTestingClusterOption.builder().numRegionServers(servers).rsPorts(ports).build();
restartHBaseCluster(option);
invalidateConnection();
}
@@ -1256,16 +966,16 @@
}
/**
- * @return Current mini hbase cluster. Only has something in it after a call
- * to {@link #startMiniCluster()}.
+ * Returns current mini hbase cluster. Only has something in it after a call to
+ * {@link #startMiniCluster()}.
* @see #startMiniCluster()
*/
public SingleProcessHBaseCluster getMiniHBaseCluster() {
if (this.hbaseCluster == null || this.hbaseCluster instanceof SingleProcessHBaseCluster) {
- return (SingleProcessHBaseCluster)this.hbaseCluster;
+ return (SingleProcessHBaseCluster) this.hbaseCluster;
}
- throw new RuntimeException(hbaseCluster + " not an instance of " +
- SingleProcessHBaseCluster.class.getName());
+ throw new RuntimeException(
+ hbaseCluster + " not an instance of " + SingleProcessHBaseCluster.class.getName());
}
/**
@@ -1326,10 +1036,9 @@
}
/**
- * Returns the path to the default root dir the minicluster uses. If <code>create</code>
- * is true, a new root directory path is fetched irrespective of whether it has been fetched
- * before or not. If false, previous path is used.
- * Note: this does not cause the root dir to be created.
+ * Returns the path to the default root dir the minicluster uses. If <code>create</code> is true,
+ * a new root directory path is fetched irrespective of whether it has been fetched before or not.
+ * If false, previous path is used. Note: this does not cause the root dir to be created.
* @return Fully qualified path for the default hbase root dir
* @throws IOException
*/
@@ -1342,9 +1051,8 @@
}
/**
- * Same as {{@link HBaseTestingUtil#getDefaultRootDirPath(boolean create)}
- * except that <code>create</code> flag is false.
- * Note: this does not cause the root dir to be created.
+ * Same as {{@link HBaseTestingUtil#getDefaultRootDirPath(boolean create)} except that
+ * <code>create</code> flag is false. Note: this does not cause the root dir to be created.
* @return Fully qualified path for the default hbase root dir
* @throws IOException
*/
@@ -1353,14 +1061,12 @@
}
/**
- * Creates an hbase rootdir in user home directory. Also creates hbase
- * version file. Normally you won't make use of this method. Root hbasedir
- * is created for you as part of mini cluster startup. You'd only use this
- * method if you were doing manual operation.
- * @param create This flag decides whether to get a new
- * root or data directory path or not, if it has been fetched already.
- * Note : Directory will be made irrespective of whether path has been fetched or not.
- * If directory already exists, it will be overwritten
+ * Creates an hbase rootdir in user home directory. Also creates hbase version file. Normally you
+ * won't make use of this method. Root hbasedir is created for you as part of mini cluster
+ * startup. You'd only use this method if you were doing manual operation.
+ * @param create This flag decides whether to get a new root or data directory path or not, if it
+ * has been fetched already. Note : Directory will be made irrespective of whether path
+ * has been fetched or not. If directory already exists, it will be overwritten
* @return Fully qualified path to hbase root dir
* @throws IOException
*/
@@ -1374,8 +1080,8 @@
}
/**
- * Same as {@link HBaseTestingUtil#createRootDir(boolean create)}
- * except that <code>create</code> flag is false.
+ * Same as {@link HBaseTestingUtil#createRootDir(boolean create)} except that <code>create</code>
+ * flag is false.
* @return Fully qualified path to hbase root dir
* @throws IOException
*/
@@ -1384,14 +1090,12 @@
}
/**
- * Creates a hbase walDir in the user's home directory.
- * Normally you won't make use of this method. Root hbaseWALDir
- * is created for you as part of mini cluster startup. You'd only use this
- * method if you were doing manual operation.
- *
+ * Creates a hbase walDir in the user's home directory. Normally you won't make use of this
+ * method. Root hbaseWALDir is created for you as part of mini cluster startup. You'd only use
+ * this method if you were doing manual operation.
* @return Fully qualified path to hbase root dir
* @throws IOException
- */
+ */
public Path createWALRootDir() throws IOException {
FileSystem fs = FileSystem.get(this.conf);
Path walDir = getNewDataTestDirOnTestFS();
@@ -1403,7 +1107,7 @@
private void setHBaseFsTmpDir() throws IOException {
String hbaseFsTmpDirInString = this.conf.get("hbase.fs.tmp.dir");
if (hbaseFsTmpDirInString == null) {
- this.conf.set("hbase.fs.tmp.dir", getDataTestDirOnTestFS("hbase-staging").toString());
+ this.conf.set("hbase.fs.tmp.dir", getDataTestDirOnTestFS("hbase-staging").toString());
LOG.info("Setting hbase.fs.tmp.dir to " + this.conf.get("hbase.fs.tmp.dir"));
} else {
LOG.info("The hbase.fs.tmp.dir is set to " + hbaseFsTmpDirInString);
@@ -1449,9 +1153,8 @@
* @return A Table instance for the created table.
* @throws IOException
*/
- public Table createTable(TableName tableName, String family)
- throws IOException{
- return createTable(tableName, new String[]{family});
+ public Table createTable(TableName tableName, String family) throws IOException {
+ return createTable(tableName, new String[] { family });
}
/**
@@ -1461,8 +1164,7 @@
* @return A Table instance for the created table.
* @throws IOException
*/
- public Table createTable(TableName tableName, String[] families)
- throws IOException {
+ public Table createTable(TableName tableName, String[] families) throws IOException {
List<byte[]> fams = new ArrayList<>(families.length);
for (String family : families) {
fams.add(Bytes.toBytes(family));
@@ -1477,9 +1179,8 @@
* @return A Table instance for the created table.
* @throws IOException
*/
- public Table createTable(TableName tableName, byte[] family)
- throws IOException{
- return createTable(tableName, new byte[][]{family});
+ public Table createTable(TableName tableName, byte[] family) throws IOException {
+ return createTable(tableName, new byte[][] { family });
}
/**
@@ -1491,7 +1192,7 @@
* @throws IOException
*/
public Table createMultiRegionTable(TableName tableName, byte[] family, int numRegions)
- throws IOException {
+ throws IOException {
if (numRegions < 3) throw new IOException("Must create at least 3 regions");
byte[] startKey = Bytes.toBytes("aaaaa");
byte[] endKey = Bytes.toBytes("zzzzz");
@@ -1507,8 +1208,7 @@
* @return A Table instance for the created table.
* @throws IOException
*/
- public Table createTable(TableName tableName, byte[][] families)
- throws IOException {
+ public Table createTable(TableName tableName, byte[][] families) throws IOException {
return createTable(tableName, families, (byte[][]) null);
}
@@ -1545,7 +1245,7 @@
* @throws IOException
*/
public Table createTable(TableName tableName, byte[][] families, byte[][] splitKeys)
- throws IOException {
+ throws IOException {
return createTable(tableName, families, splitKeys, 1, new Configuration(getConfiguration()));
}
@@ -1559,7 +1259,7 @@
* @throws IOException throws IOException
*/
public Table createTable(TableName tableName, byte[][] families, byte[][] splitKeys,
- int replicaCount) throws IOException {
+ int replicaCount) throws IOException {
return createTable(tableName, families, splitKeys, replicaCount,
new Configuration(getConfiguration()));
}
@@ -1595,7 +1295,7 @@
* @throws IOException if getAdmin or createTable fails
*/
public Table createTable(TableDescriptor htd, byte[][] families, byte[][] splitKeys,
- Configuration c) throws IOException {
+ Configuration c) throws IOException {
// Disable blooms (they are on by default as of 0.95) but we disable them here because
// tests have hard coded counts of what to expect in block cache, etc., and blooms being
// on is interfering.
@@ -1615,14 +1315,13 @@
*/
public Table createTable(TableDescriptor htd, byte[][] families, byte[][] splitKeys,
- BloomType type, int blockSize, Configuration c) throws IOException {
+ BloomType type, int blockSize, Configuration c) throws IOException {
TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(htd);
for (byte[] family : families) {
ColumnFamilyDescriptorBuilder cfdb = ColumnFamilyDescriptorBuilder.newBuilder(family)
- .setBloomFilterType(type)
- .setBlocksize(blockSize);
+ .setBloomFilterType(type).setBlocksize(blockSize);
if (isNewVersionBehaviorEnabled()) {
- cfdb.setNewVersionBehavior(true);
+ cfdb.setNewVersionBehavior(true);
}
builder.setColumnFamily(cfdb.build());
}
@@ -1645,13 +1344,12 @@
* @return A Table instance for the created table.
* @throws IOException
*/
- public Table createTable(TableDescriptor htd, byte[][] splitRows)
- throws IOException {
+ public Table createTable(TableDescriptor htd, byte[][] splitRows) throws IOException {
TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(htd);
if (isNewVersionBehaviorEnabled()) {
for (ColumnFamilyDescriptor family : htd.getColumnFamilies()) {
- builder.setColumnFamily(ColumnFamilyDescriptorBuilder.newBuilder(family)
- .setNewVersionBehavior(true).build());
+ builder.setColumnFamily(
+ ColumnFamilyDescriptorBuilder.newBuilder(family).setNewVersionBehavior(true).build());
}
}
if (splitRows != null) {
@@ -1694,7 +1392,7 @@
* @return A Table instance for the created table.
*/
public Table createTable(TableName tableName, byte[][] families, int numVersions)
- throws IOException {
+ throws IOException {
return createTable(tableName, families, numVersions, (byte[][]) null);
}
@@ -1703,11 +1401,11 @@
* @return A Table instance for the created table.
*/
public Table createTable(TableName tableName, byte[][] families, int numVersions,
- byte[][] splitKeys) throws IOException {
+ byte[][] splitKeys) throws IOException {
TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName);
for (byte[] family : families) {
- ColumnFamilyDescriptorBuilder cfBuilder = ColumnFamilyDescriptorBuilder.newBuilder(family)
- .setMaxVersions(numVersions);
+ ColumnFamilyDescriptorBuilder cfBuilder =
+ ColumnFamilyDescriptorBuilder.newBuilder(family).setMaxVersions(numVersions);
if (isNewVersionBehaviorEnabled()) {
cfBuilder.setNewVersionBehavior(true);
}
@@ -1729,7 +1427,7 @@
* @return A Table instance for the created table.
*/
public Table createMultiRegionTable(TableName tableName, byte[][] families, int numVersions)
- throws IOException {
+ throws IOException {
return createTable(tableName, families, numVersions, KEYS_FOR_HBA_CREATE_TABLE);
}
@@ -1737,8 +1435,8 @@
* Create a table.
* @return A Table instance for the created table.
*/
- public Table createTable(TableName tableName, byte[][] families,
- int numVersions, int blockSize) throws IOException {
+ public Table createTable(TableName tableName, byte[][] families, int numVersions, int blockSize)
+ throws IOException {
TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName);
for (byte[] family : families) {
ColumnFamilyDescriptorBuilder cfBuilder = ColumnFamilyDescriptorBuilder.newBuilder(family)
@@ -1755,8 +1453,8 @@
return getConnection().getTable(tableName);
}
- public Table createTable(TableName tableName, byte[][] families,
- int numVersions, int blockSize, String cpName) throws IOException {
+ public Table createTable(TableName tableName, byte[][] families, int numVersions, int blockSize,
+ String cpName) throws IOException {
TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName);
for (byte[] family : families) {
ColumnFamilyDescriptorBuilder cfBuilder = ColumnFamilyDescriptorBuilder.newBuilder(family)
@@ -1828,19 +1526,6 @@
}
/**
- * Modify a table, synchronous.
- * @deprecated since 3.0.0 and will be removed in 4.0.0. Just use
- * {@link Admin#modifyTable(TableDescriptor)} directly as it is synchronous now.
- * @see Admin#modifyTable(TableDescriptor)
- * @see <a href="https://issues.apache.org/jira/browse/HBASE-22002">HBASE-22002</a>
- */
- @Deprecated
- public static void modifyTableSync(Admin admin, TableDescriptor desc)
- throws IOException, InterruptedException {
- admin.modifyTable(desc);
- }
-
- /**
* Set the number of Region replicas.
*/
public static void setReplicas(Admin admin, TableName table, int replicaCount)
@@ -1878,15 +1563,15 @@
// ==========================================================================
// Canned table and table descriptor creation
- public final static byte [] fam1 = Bytes.toBytes("colfamily11");
- public final static byte [] fam2 = Bytes.toBytes("colfamily21");
- public final static byte [] fam3 = Bytes.toBytes("colfamily31");
- public static final byte[][] COLUMNS = {fam1, fam2, fam3};
+ public final static byte[] fam1 = Bytes.toBytes("colfamily11");
+ public final static byte[] fam2 = Bytes.toBytes("colfamily21");
+ public final static byte[] fam3 = Bytes.toBytes("colfamily31");
+ public static final byte[][] COLUMNS = { fam1, fam2, fam3 };
private static final int MAXVERSIONS = 3;
public static final char FIRST_CHAR = 'a';
public static final char LAST_CHAR = 'z';
- public static final byte [] START_KEY_BYTES = {FIRST_CHAR, FIRST_CHAR, FIRST_CHAR};
+ public static final byte[] START_KEY_BYTES = { FIRST_CHAR, FIRST_CHAR, FIRST_CHAR };
public static final String START_KEY = new String(START_KEY_BYTES, HConstants.UTF8_CHARSET);
public TableDescriptorBuilder createModifyableTableDescriptor(final String name) {
@@ -1985,7 +1670,7 @@
* @throws IOException
*/
public HRegion createLocalHRegion(RegionInfo info, Configuration conf, TableDescriptor desc,
- WAL wal) throws IOException {
+ WAL wal) throws IOException {
return HRegion.createHRegion(info, getDataTestDir(), conf, desc, wal);
}
@@ -1995,15 +1680,15 @@
* @param stopKey
* @param isReadOnly
* @param families
- * @return A region on which you must call
- * {@link HBaseTestingUtil#closeRegionAndWAL(HRegion)} when done.
+ * @return A region on which you must call {@link HBaseTestingUtil#closeRegionAndWAL(HRegion)}
+ * when done.
* @throws IOException
*/
public HRegion createLocalHRegion(TableName tableName, byte[] startKey, byte[] stopKey,
- Configuration conf, boolean isReadOnly, Durability durability, WAL wal, byte[]... families)
- throws IOException {
+ Configuration conf, boolean isReadOnly, Durability durability, WAL wal, byte[]... families)
+ throws IOException {
return createLocalHRegionWithInMemoryFlags(tableName, startKey, stopKey, conf, isReadOnly,
- durability, wal, null, families);
+ durability, wal, null, families);
}
public HRegion createLocalHRegionWithInMemoryFlags(TableName tableName, byte[] startKey,
@@ -2035,8 +1720,8 @@
// ==========================================================================
/**
- * Provide an existing table name to truncate.
- * Scans the table and issues a delete for each row read.
+ * Provide an existing table name to truncate. Scans the table and issues a delete for each row
+ * read.
* @param tableName existing table
* @return HTable to that new table
* @throws IOException
@@ -2045,7 +1730,7 @@
Table table = getConnection().getTable(tableName);
Scan scan = new Scan();
ResultScanner resScan = table.getScanner(scan);
- for(Result res : resScan) {
+ for (Result res : resScan) {
Delete del = new Delete(res.getRow());
table.delete(del);
}
@@ -2055,14 +1740,14 @@
}
/**
- * Truncate a table using the admin command.
- * Effectively disables, deletes, and recreates the table.
+ * Truncate a table using the admin command. Effectively disables, deletes, and recreates the
+ * table.
* @param tableName table which must exist.
* @param preserveRegions keep the existing split points
* @return HTable for the new table
*/
- public Table truncateTable(final TableName tableName, final boolean preserveRegions) throws
- IOException {
+ public Table truncateTable(final TableName tableName, final boolean preserveRegions)
+ throws IOException {
Admin admin = getAdmin();
if (!admin.isTableDisabled(tableName)) {
admin.disableTable(tableName);
@@ -2072,11 +1757,9 @@
}
/**
- * Truncate a table using the admin command.
- * Effectively disables, deletes, and recreates the table.
- * For previous behavior of issuing row deletes, see
- * deleteTableData.
- * Expressly does not preserve regions of existing table.
+ * Truncate a table using the admin command. Effectively disables, deletes, and recreates the
+ * table. For previous behavior of issuing row deletes, see deleteTableData. Expressly does not
+ * preserve regions of existing table.
* @param tableName table which must exist.
* @return HTable for the new table
*/
@@ -2092,7 +1775,7 @@
* @throws IOException
*/
public int loadTable(final Table t, final byte[] f) throws IOException {
- return loadTable(t, new byte[][] {f});
+ return loadTable(t, new byte[][] { f });
}
/**
@@ -2103,7 +1786,7 @@
* @throws IOException
*/
public int loadTable(final Table t, final byte[] f, boolean writeToWAL) throws IOException {
- return loadTable(t, new byte[][] {f}, null, writeToWAL);
+ return loadTable(t, new byte[][] { f }, null, writeToWAL);
}
/**
@@ -2137,8 +1820,8 @@
* @return Count of rows loaded.
* @throws IOException
*/
- public int loadTable(final Table t, final byte[][] f, byte[] value,
- boolean writeToWAL) throws IOException {
+ public int loadTable(final Table t, final byte[][] f, byte[] value, boolean writeToWAL)
+ throws IOException {
List<Put> puts = new ArrayList<>();
for (byte[] row : HBaseTestingUtil.ROWS) {
Put put = new Put(row);
@@ -2153,12 +1836,13 @@
return puts.size();
}
- /** A tracker for tracking and validating table rows
- * generated with {@link HBaseTestingUtil#loadTable(Table, byte[])}
+ /**
+ * A tracker for tracking and validating table rows generated with
+ * {@link HBaseTestingUtil#loadTable(Table, byte[])}
*/
public static class SeenRowTracker {
int dim = 'z' - 'a' + 1;
- int[][][] seenRows = new int[dim][dim][dim]; //count of how many times the row is seen
+ int[][][] seenRows = new int[dim][dim][dim]; // count of how many times the row is seen
byte[] startRow;
byte[] stopRow;
@@ -2181,8 +1865,9 @@
seenRows[i(row[0])][i(row[1])][i(row[2])]++;
}
- /** Validate that all the rows between startRow and stopRow are seen exactly once, and
- * all other rows none
+ /**
+ * Validate that all the rows between startRow and stopRow are seen exactly once, and all other
+ * rows none
*/
public void validate() {
for (byte b1 = 'a'; b1 <= 'z'; b1++) {
@@ -2190,14 +1875,14 @@
for (byte b3 = 'a'; b3 <= 'z'; b3++) {
int count = seenRows[i(b1)][i(b2)][i(b3)];
int expectedCount = 0;
- if (Bytes.compareTo(new byte[] {b1,b2,b3}, startRow) >= 0
- && Bytes.compareTo(new byte[] {b1,b2,b3}, stopRow) < 0) {
+ if (Bytes.compareTo(new byte[] { b1, b2, b3 }, startRow) >= 0 &&
+ Bytes.compareTo(new byte[] { b1, b2, b3 }, stopRow) < 0) {
expectedCount = 1;
}
if (count != expectedCount) {
- String row = new String(new byte[] {b1,b2,b3}, StandardCharsets.UTF_8);
+ String row = new String(new byte[] { b1, b2, b3 }, StandardCharsets.UTF_8);
throw new RuntimeException("Row:" + row + " has a seen count of " + count + " " +
- "instead of " + expectedCount);
+ "instead of " + expectedCount);
}
}
}
@@ -2210,7 +1895,7 @@
}
public int loadRegion(final Region r, final byte[] f) throws IOException {
- return loadRegion((HRegion)r, f);
+ return loadRegion((HRegion) r, f);
}
/**
@@ -2221,8 +1906,7 @@
* @return Count of rows loaded.
* @throws IOException
*/
- public int loadRegion(final HRegion r, final byte[] f, final boolean flush)
- throws IOException {
+ public int loadRegion(final HRegion r, final byte[] f, final boolean flush) throws IOException {
byte[] k = new byte[3];
int rowCount = 0;
for (byte b1 = 'a'; b1 <= 'z'; b1++) {
@@ -2259,7 +1943,7 @@
}
public void loadNumericRows(final Table t, final byte[] f, int startRow, int endRow)
- throws IOException {
+ throws IOException {
for (int i = startRow; i < endRow; i++) {
byte[] data = Bytes.toBytes(String.valueOf(i));
Put put = new Put(data);
@@ -2269,20 +1953,19 @@
}
public void loadRandomRows(final Table t, final byte[] f, int rowSize, int totalRows)
- throws IOException {
+ throws IOException {
Random r = new Random();
byte[] row = new byte[rowSize];
for (int i = 0; i < totalRows; i++) {
r.nextBytes(row);
Put put = new Put(row);
- put.addColumn(f, new byte[]{0}, new byte[]{0});
+ put.addColumn(f, new byte[] { 0 }, new byte[] { 0 });
t.put(put);
}
}
public void verifyNumericRows(Table table, final byte[] f, int startRow, int endRow,
- int replicaId)
- throws IOException {
+ int replicaId) throws IOException {
for (int i = startRow; i < endRow; i++) {
String failMsg = "Failed verification of row :" + i;
byte[] data = Bytes.toBytes(String.valueOf(i));
@@ -2293,29 +1976,28 @@
assertTrue(failMsg, result.containsColumn(f, null));
assertEquals(failMsg, 1, result.getColumnCells(f, null).size());
Cell cell = result.getColumnLatestCell(f, null);
- assertTrue(failMsg,
- Bytes.equals(data, 0, data.length, cell.getValueArray(), cell.getValueOffset(),
- cell.getValueLength()));
+ assertTrue(failMsg, Bytes.equals(data, 0, data.length, cell.getValueArray(),
+ cell.getValueOffset(), cell.getValueLength()));
}
}
public void verifyNumericRows(Region region, final byte[] f, int startRow, int endRow)
- throws IOException {
- verifyNumericRows((HRegion)region, f, startRow, endRow);
+ throws IOException {
+ verifyNumericRows((HRegion) region, f, startRow, endRow);
}
public void verifyNumericRows(HRegion region, final byte[] f, int startRow, int endRow)
- throws IOException {
+ throws IOException {
verifyNumericRows(region, f, startRow, endRow, true);
}
public void verifyNumericRows(Region region, final byte[] f, int startRow, int endRow,
- final boolean present) throws IOException {
- verifyNumericRows((HRegion)region, f, startRow, endRow, present);
+ final boolean present) throws IOException {
+ verifyNumericRows((HRegion) region, f, startRow, endRow, present);
}
public void verifyNumericRows(HRegion region, final byte[] f, int startRow, int endRow,
- final boolean present) throws IOException {
+ final boolean present) throws IOException {
for (int i = startRow; i < endRow; i++) {
String failMsg = "Failed verification of row :" + i;
byte[] data = Bytes.toBytes(String.valueOf(i));
@@ -2328,14 +2010,13 @@
assertTrue(failMsg, result.containsColumn(f, null));
assertEquals(failMsg, 1, result.getColumnCells(f, null).size());
Cell cell = result.getColumnLatestCell(f, null);
- assertTrue(failMsg,
- Bytes.equals(data, 0, data.length, cell.getValueArray(), cell.getValueOffset(),
- cell.getValueLength()));
+ assertTrue(failMsg, Bytes.equals(data, 0, data.length, cell.getValueArray(),
+ cell.getValueOffset(), cell.getValueLength()));
}
}
public void deleteNumericRows(final Table t, final byte[] f, int startRow, int endRow)
- throws IOException {
+ throws IOException {
for (int i = startRow; i < endRow; i++) {
byte[] data = Bytes.toBytes(String.valueOf(i));
Delete delete = new Delete(data);
@@ -2363,9 +2044,9 @@
}
}
- public int countRows(final Table table, final byte[]... families) throws IOException {
+ public static int countRows(final Table table, final byte[]... families) throws IOException {
Scan scan = new Scan();
- for (byte[] family: families) {
+ for (byte[] family : families) {
scan.addFamily(family);
}
return countRows(table, scan);
@@ -2375,28 +2056,22 @@
* Return the number of rows in the given table.
*/
public int countRows(final TableName tableName) throws IOException {
- Table table = getConnection().getTable(tableName);
- try {
+ try (Table table = getConnection().getTable(tableName)) {
return countRows(table);
- } finally {
- table.close();
}
}
- public int countRows(final Region region) throws IOException {
+ public static int countRows(final Region region) throws IOException {
return countRows(region, new Scan());
}
- public int countRows(final Region region, final Scan scan) throws IOException {
- InternalScanner scanner = region.getScanner(scan);
- try {
+ public static int countRows(final Region region, final Scan scan) throws IOException {
+ try (InternalScanner scanner = region.getScanner(scan)) {
return countRows(scanner);
- } finally {
- scanner.close();
}
}
- public int countRows(final InternalScanner scanner) throws IOException {
+ public static int countRows(final InternalScanner scanner) throws IOException {
int scannedCount = 0;
List<Cell> results = new ArrayList<>();
boolean hasMore = true;
@@ -2412,14 +2087,12 @@
* Return an md5 digest of the entire contents of a table.
*/
public String checksumRows(final Table table) throws Exception {
-
- Scan scan = new Scan();
- ResultScanner results = table.getScanner(scan);
MessageDigest digest = MessageDigest.getInstance("MD5");
- for (Result res : results) {
- digest.update(res.getRow());
+ try (ResultScanner results = table.getScanner(new Scan())) {
+ for (Result res : results) {
+ digest.update(res.getRow());
+ }
}
- results.close();
return digest.toString();
}
@@ -2439,68 +2112,51 @@
}
}
- public static final byte[][] KEYS = {
- HConstants.EMPTY_BYTE_ARRAY, Bytes.toBytes("bbb"),
- Bytes.toBytes("ccc"), Bytes.toBytes("ddd"), Bytes.toBytes("eee"),
- Bytes.toBytes("fff"), Bytes.toBytes("ggg"), Bytes.toBytes("hhh"),
- Bytes.toBytes("iii"), Bytes.toBytes("jjj"), Bytes.toBytes("kkk"),
- Bytes.toBytes("lll"), Bytes.toBytes("mmm"), Bytes.toBytes("nnn"),
- Bytes.toBytes("ooo"), Bytes.toBytes("ppp"), Bytes.toBytes("qqq"),
- Bytes.toBytes("rrr"), Bytes.toBytes("sss"), Bytes.toBytes("ttt"),
- Bytes.toBytes("uuu"), Bytes.toBytes("vvv"), Bytes.toBytes("www"),
- Bytes.toBytes("xxx"), Bytes.toBytes("yyy")
- };
+ public static final byte[][] KEYS = { HConstants.EMPTY_BYTE_ARRAY, Bytes.toBytes("bbb"),
+ Bytes.toBytes("ccc"), Bytes.toBytes("ddd"), Bytes.toBytes("eee"), Bytes.toBytes("fff"),
+ Bytes.toBytes("ggg"), Bytes.toBytes("hhh"), Bytes.toBytes("iii"), Bytes.toBytes("jjj"),
+ Bytes.toBytes("kkk"), Bytes.toBytes("lll"), Bytes.toBytes("mmm"), Bytes.toBytes("nnn"),
+ Bytes.toBytes("ooo"), Bytes.toBytes("ppp"), Bytes.toBytes("qqq"), Bytes.toBytes("rrr"),
+ Bytes.toBytes("sss"), Bytes.toBytes("ttt"), Bytes.toBytes("uuu"), Bytes.toBytes("vvv"),
+ Bytes.toBytes("www"), Bytes.toBytes("xxx"), Bytes.toBytes("yyy") };
- public static final byte[][] KEYS_FOR_HBA_CREATE_TABLE = {
- Bytes.toBytes("bbb"),
- Bytes.toBytes("ccc"), Bytes.toBytes("ddd"), Bytes.toBytes("eee"),
- Bytes.toBytes("fff"), Bytes.toBytes("ggg"), Bytes.toBytes("hhh"),
- Bytes.toBytes("iii"), Bytes.toBytes("jjj"), Bytes.toBytes("kkk"),
- Bytes.toBytes("lll"), Bytes.toBytes("mmm"), Bytes.toBytes("nnn"),
- Bytes.toBytes("ooo"), Bytes.toBytes("ppp"), Bytes.toBytes("qqq"),
- Bytes.toBytes("rrr"), Bytes.toBytes("sss"), Bytes.toBytes("ttt"),
- Bytes.toBytes("uuu"), Bytes.toBytes("vvv"), Bytes.toBytes("www"),
- Bytes.toBytes("xxx"), Bytes.toBytes("yyy"), Bytes.toBytes("zzz")
- };
+ public static final byte[][] KEYS_FOR_HBA_CREATE_TABLE = { Bytes.toBytes("bbb"),
+ Bytes.toBytes("ccc"), Bytes.toBytes("ddd"), Bytes.toBytes("eee"), Bytes.toBytes("fff"),
+ Bytes.toBytes("ggg"), Bytes.toBytes("hhh"), Bytes.toBytes("iii"), Bytes.toBytes("jjj"),
+ Bytes.toBytes("kkk"), Bytes.toBytes("lll"), Bytes.toBytes("mmm"), Bytes.toBytes("nnn"),
+ Bytes.toBytes("ooo"), Bytes.toBytes("ppp"), Bytes.toBytes("qqq"), Bytes.toBytes("rrr"),
+ Bytes.toBytes("sss"), Bytes.toBytes("ttt"), Bytes.toBytes("uuu"), Bytes.toBytes("vvv"),
+ Bytes.toBytes("www"), Bytes.toBytes("xxx"), Bytes.toBytes("yyy"), Bytes.toBytes("zzz") };
/**
- * Create rows in hbase:meta for regions of the specified table with the specified
- * start keys. The first startKey should be a 0 length byte array if you
- * want to form a proper range of regions.
- * @param conf
- * @param htd
- * @param startKeys
+ * Create rows in hbase:meta for regions of the specified table with the specified start keys. The
+ * first startKey should be a 0 length byte array if you want to form a proper range of regions.
* @return list of region info for regions added to meta
- * @throws IOException
*/
public List<RegionInfo> createMultiRegionsInMeta(final Configuration conf,
- final TableDescriptor htd, byte [][] startKeys)
- throws IOException {
- Table meta = getConnection().getTable(TableName.META_TABLE_NAME);
- Arrays.sort(startKeys, Bytes.BYTES_COMPARATOR);
- List<RegionInfo> newRegions = new ArrayList<>(startKeys.length);
- MetaTableAccessor
- .updateTableState(getConnection(), htd.getTableName(), TableState.State.ENABLED);
- // add custom ones
- for (int i = 0; i < startKeys.length; i++) {
- int j = (i + 1) % startKeys.length;
- RegionInfo hri = RegionInfoBuilder.newBuilder(htd.getTableName())
- .setStartKey(startKeys[i])
- .setEndKey(startKeys[j])
- .build();
- MetaTableAccessor.addRegionsToMeta(getConnection(), Collections.singletonList(hri), 1);
- newRegions.add(hri);
+ final TableDescriptor htd, byte[][] startKeys) throws IOException {
+ try (Table meta = getConnection().getTable(TableName.META_TABLE_NAME)) {
+ Arrays.sort(startKeys, Bytes.BYTES_COMPARATOR);
+ List<RegionInfo> newRegions = new ArrayList<>(startKeys.length);
+ MetaTableAccessor.updateTableState(getConnection(), htd.getTableName(),
+ TableState.State.ENABLED);
+ // add custom ones
+ for (int i = 0; i < startKeys.length; i++) {
+ int j = (i + 1) % startKeys.length;
+ RegionInfo hri = RegionInfoBuilder.newBuilder(htd.getTableName()).setStartKey(startKeys[i])
+ .setEndKey(startKeys[j]).build();
+ MetaTableAccessor.addRegionsToMeta(getConnection(), Collections.singletonList(hri), 1);
+ newRegions.add(hri);
+ }
+ return newRegions;
}
-
- meta.close();
- return newRegions;
}
/**
* Create an unmanaged WAL. Be sure to close it when you're through.
*/
public static WAL createWal(final Configuration conf, final Path rootDir, final RegionInfo hri)
- throws IOException {
+ throws IOException {
// The WAL subsystem will use the default rootDir rather than the passed in rootDir
// unless I pass along via the conf.
Configuration confForWAL = new Configuration(conf);
@@ -2508,13 +2164,12 @@
return new WALFactory(confForWAL, "hregion-" + RandomStringUtils.randomNumeric(8)).getWAL(hri);
}
-
/**
* Create a region with it's own WAL. Be sure to call
* {@link HBaseTestingUtil#closeRegionAndWAL(HRegion)} to clean up all resources.
*/
public static HRegion createRegionAndWAL(final RegionInfo info, final Path rootDir,
- final Configuration conf, final TableDescriptor htd) throws IOException {
+ final Configuration conf, final TableDescriptor htd) throws IOException {
return createRegionAndWAL(info, rootDir, conf, htd, true);
}
@@ -2523,20 +2178,20 @@
* {@link HBaseTestingUtil#closeRegionAndWAL(HRegion)} to clean up all resources.
*/
public static HRegion createRegionAndWAL(final RegionInfo info, final Path rootDir,
- final Configuration conf, final TableDescriptor htd, BlockCache blockCache)
- throws IOException {
+ final Configuration conf, final TableDescriptor htd, BlockCache blockCache) throws IOException {
HRegion region = createRegionAndWAL(info, rootDir, conf, htd, false);
region.setBlockCache(blockCache);
region.initialize();
return region;
}
+
/**
* Create a region with it's own WAL. Be sure to call
* {@link HBaseTestingUtil#closeRegionAndWAL(HRegion)} to clean up all resources.
*/
public static HRegion createRegionAndWAL(final RegionInfo info, final Path rootDir,
- final Configuration conf, final TableDescriptor htd, MobFileCache mobFileCache)
- throws IOException {
+ final Configuration conf, final TableDescriptor htd, MobFileCache mobFileCache)
+ throws IOException {
HRegion region = createRegionAndWAL(info, rootDir, conf, htd, false);
region.setMobFileCache(mobFileCache);
region.initialize();
@@ -2548,84 +2203,19 @@
* {@link HBaseTestingUtil#closeRegionAndWAL(HRegion)} to clean up all resources.
*/
public static HRegion createRegionAndWAL(final RegionInfo info, final Path rootDir,
- final Configuration conf, final TableDescriptor htd, boolean initialize)
- throws IOException {
- ChunkCreator.initialize(MemStoreLAB.CHUNK_SIZE_DEFAULT, false, 0, 0,
- 0, null, MemStoreLAB.INDEX_CHUNK_SIZE_PERCENTAGE_DEFAULT);
+ final Configuration conf, final TableDescriptor htd, boolean initialize) throws IOException {
+ ChunkCreator.initialize(MemStoreLAB.CHUNK_SIZE_DEFAULT, false, 0, 0, 0, null,
+ MemStoreLAB.INDEX_CHUNK_SIZE_PERCENTAGE_DEFAULT);
WAL wal = createWal(conf, rootDir, info);
return HRegion.createHRegion(info, rootDir, conf, htd, wal, initialize);
}
/**
- * Returns all rows from the hbase:meta table.
- *
- * @throws IOException When reading the rows fails.
- */
- public List<byte[]> getMetaTableRows() throws IOException {
- // TODO: Redo using MetaTableAccessor class
- Table t = getConnection().getTable(TableName.META_TABLE_NAME);
- List<byte[]> rows = new ArrayList<>();
- ResultScanner s = t.getScanner(new Scan());
- for (Result result : s) {
- LOG.info("getMetaTableRows: row -> " +
- Bytes.toStringBinary(result.getRow()));
- rows.add(result.getRow());
- }
- s.close();
- t.close();
- return rows;
- }
-
- /**
- * Returns all rows from the hbase:meta table for a given user table
- *
- * @throws IOException When reading the rows fails.
- */
- public List<byte[]> getMetaTableRows(TableName tableName) throws IOException {
- // TODO: Redo using MetaTableAccessor.
- Table t = getConnection().getTable(TableName.META_TABLE_NAME);
- List<byte[]> rows = new ArrayList<>();
- ResultScanner s = t.getScanner(new Scan());
- for (Result result : s) {
- RegionInfo info = CatalogFamilyFormat.getRegionInfo(result);
- if (info == null) {
- LOG.error("No region info for row " + Bytes.toString(result.getRow()));
- // TODO figure out what to do for this new hosed case.
- continue;
- }
-
- if (info.getTable().equals(tableName)) {
- LOG.info("getMetaTableRows: row -> " +
- Bytes.toStringBinary(result.getRow()) + info);
- rows.add(result.getRow());
- }
- }
- s.close();
- t.close();
- return rows;
- }
-
- /**
- * Returns all regions of the specified table
- *
- * @param tableName the table name
- * @return all regions of the specified table
- * @throws IOException when getting the regions fails.
- */
- private List<RegionInfo> getRegions(TableName tableName) throws IOException {
- try (Admin admin = getConnection().getAdmin()) {
- return admin.getRegions(tableName);
- }
- }
-
- /*
* Find any other region server which is different from the one identified by parameter
- * @param rs
* @return another region server
*/
public HRegionServer getOtherRegionServer(HRegionServer rs) {
- for (JVMClusterUtil.RegionServerThread rst :
- getMiniHBaseCluster().getRegionServerThreads()) {
+ for (JVMClusterUtil.RegionServerThread rst : getMiniHBaseCluster().getRegionServerThreads()) {
if (!(rst.getRegionServer() == rs)) {
return rst.getRegionServer();
}
@@ -2634,26 +2224,21 @@
}
/**
- * Tool to get the reference to the region server object that holds the
- * region of the specified user table.
+ * Tool to get the reference to the region server object that holds the region of the specified
+ * user table.
* @param tableName user table to lookup in hbase:meta
* @return region server that holds it, null if the row doesn't exist
- * @throws IOException
- * @throws InterruptedException
*/
public HRegionServer getRSForFirstRegionInTable(TableName tableName)
- throws IOException, InterruptedException {
- List<RegionInfo> regions = getRegions(tableName);
+ throws IOException, InterruptedException {
+ List<RegionInfo> regions = getAdmin().getRegions(tableName);
if (regions == null || regions.isEmpty()) {
return null;
}
- LOG.debug("Found " + regions.size() + " regions for table " +
- tableName);
+ LOG.debug("Found " + regions.size() + " regions for table " + tableName);
- byte[] firstRegionName = regions.stream()
- .filter(r -> !r.isOffline())
- .map(RegionInfo::getRegionName)
- .findFirst()
+ byte[] firstRegionName =
+ regions.stream().filter(r -> !r.isOffline()).map(RegionInfo::getRegionName).findFirst()
.orElseThrow(() -> new IOException("online regions not found in table " + tableName));
LOG.debug("firstRegionName=" + Bytes.toString(firstRegionName));
@@ -2661,36 +2246,33 @@
HConstants.DEFAULT_HBASE_CLIENT_PAUSE);
int numRetries = getConfiguration().getInt(HConstants.HBASE_CLIENT_RETRIES_NUMBER,
HConstants.DEFAULT_HBASE_CLIENT_RETRIES_NUMBER);
- RetryCounter retrier = new RetryCounter(numRetries+1, (int)pause, TimeUnit.MICROSECONDS);
- while(retrier.shouldRetry()) {
+ RetryCounter retrier = new RetryCounter(numRetries + 1, (int) pause, TimeUnit.MICROSECONDS);
+ while (retrier.shouldRetry()) {
int index = getMiniHBaseCluster().getServerWith(firstRegionName);
if (index != -1) {
return getMiniHBaseCluster().getRegionServerThreads().get(index).getRegionServer();
}
- // Came back -1. Region may not be online yet. Sleep a while.
+ // Came back -1. Region may not be online yet. Sleep a while.
retrier.sleepUntilNextRetry();
}
return null;
}
/**
- * Starts a <code>MiniMRCluster</code> with a default number of
- * <code>TaskTracker</code>'s.
- *
+ * Starts a <code>MiniMRCluster</code> with a default number of <code>TaskTracker</code>'s.
* @throws IOException When starting the cluster fails.
*/
public MiniMRCluster startMiniMapReduceCluster() throws IOException {
// Set a very high max-disk-utilization percentage to avoid the NodeManagers from failing.
- conf.setIfUnset(
- "yarn.nodemanager.disk-health-checker.max-disk-utilization-per-disk-percentage",
- "99.0");
+ conf.setIfUnset("yarn.nodemanager.disk-health-checker.max-disk-utilization-per-disk-percentage",
+ "99.0");
startMiniMapReduceCluster(2);
return mrCluster;
}
/**
- * Tasktracker has a bug where changing the hadoop.log.dir system property
- * will not change its internal static LOG_DIR variable.
+ * Tasktracker has a bug where changing the hadoop.log.dir system property will not change its
+ * internal static LOG_DIR variable.
*/
private void forceChangeTaskLogDir() {
Field logDirField;
@@ -2717,7 +2299,7 @@
/**
* Starts a <code>MiniMRCluster</code>. Call {@link #setFileSystemURI(String)} to use a different
* filesystem.
- * @param servers The number of <code>TaskTracker</code>'s to start.
+ * @param servers The number of <code>TaskTracker</code>'s to start.
* @throws IOException When starting the cluster fails.
*/
private void startMiniMapReduceCluster(final int servers) throws IOException {
@@ -2742,21 +2324,21 @@
////
// Allow the user to override FS URI for this map-reduce cluster to use.
- mrCluster = new MiniMRCluster(servers,
- FS_URI != null ? FS_URI : FileSystem.get(conf).getUri().toString(), 1,
- null, null, new JobConf(this.conf));
+ mrCluster =
+ new MiniMRCluster(servers, FS_URI != null ? FS_URI : FileSystem.get(conf).getUri().toString(),
+ 1, null, null, new JobConf(this.conf));
JobConf jobConf = MapreduceTestingShim.getJobConf(mrCluster);
if (jobConf == null) {
jobConf = mrCluster.createJobConf();
}
- jobConf.set("mapreduce.cluster.local.dir",
- conf.get("mapreduce.cluster.local.dir")); //Hadoop MiniMR overwrites this while it should not
+ // Hadoop MiniMR overwrites this while it should not
+ jobConf.set("mapreduce.cluster.local.dir", conf.get("mapreduce.cluster.local.dir"));
LOG.info("Mini mapreduce cluster started");
// In hadoop2, YARN/MR2 starts a mini cluster with its own conf instance and updates settings.
- // Our HBase MR jobs need several of these settings in order to properly run. So we copy the
- // necessary config properties here. YARN-129 required adding a few properties.
+ // Our HBase MR jobs need several of these settings in order to properly run. So we copy the
+ // necessary config properties here. YARN-129 required adding a few properties.
conf.set("mapreduce.jobtracker.address", jobConf.get("mapreduce.jobtracker.address"));
// this for mrv2 support; mr1 ignores this
conf.set("mapreduce.framework.name", "yarn");
@@ -2769,18 +2351,15 @@
if (historyAddress != null) {
conf.set("mapreduce.jobhistory.address", historyAddress);
}
- String schedulerAddress =
- jobConf.get("yarn.resourcemanager.scheduler.address");
+ String schedulerAddress = jobConf.get("yarn.resourcemanager.scheduler.address");
if (schedulerAddress != null) {
conf.set("yarn.resourcemanager.scheduler.address", schedulerAddress);
}
- String mrJobHistoryWebappAddress =
- jobConf.get("mapreduce.jobhistory.webapp.address");
+ String mrJobHistoryWebappAddress = jobConf.get("mapreduce.jobhistory.webapp.address");
if (mrJobHistoryWebappAddress != null) {
conf.set("mapreduce.jobhistory.webapp.address", mrJobHistoryWebappAddress);
}
- String yarnRMWebappAddress =
- jobConf.get("yarn.resourcemanager.webapp.address");
+ String yarnRMWebappAddress = jobConf.get("yarn.resourcemanager.webapp.address");
if (yarnRMWebappAddress != null) {
conf.set("yarn.resourcemanager.webapp.address", yarnRMWebappAddress);
}
@@ -2804,15 +2383,15 @@
* Create a stubbed out RegionServerService, mainly for getting FS.
*/
public RegionServerServices createMockRegionServerService() throws IOException {
- return createMockRegionServerService((ServerName)null);
+ return createMockRegionServerService((ServerName) null);
}
/**
- * Create a stubbed out RegionServerService, mainly for getting FS.
- * This version is used by TestTokenAuthentication
+ * Create a stubbed out RegionServerService, mainly for getting FS. This version is used by
+ * TestTokenAuthentication
*/
- public RegionServerServices createMockRegionServerService(RpcServerInterface rpc) throws
- IOException {
+ public RegionServerServices createMockRegionServerService(RpcServerInterface rpc)
+ throws IOException {
final MockRegionServerServices rss = new MockRegionServerServices(getZooKeeperWatcher());
rss.setFileSystem(getTestFileSystem());
rss.setRpcServer(rpc);
@@ -2820,8 +2399,8 @@
}
/**
- * Create a stubbed out RegionServerService, mainly for getting FS.
- * This version is used by TestOpenRegionHandler
+ * Create a stubbed out RegionServerService, mainly for getting FS. This version is used by
+ * TestOpenRegionHandler
*/
public RegionServerServices createMockRegionServerService(ServerName name) throws IOException {
final MockRegionServerServices rss = new MockRegionServerServices(getZooKeeperWatcher(), name);
@@ -2830,20 +2409,7 @@
}
/**
- * Switches the logger for the given class to DEBUG level.
- * @param clazz The class for which to switch to debug logging.
- * @deprecated In 2.3.0, will be removed in 4.0.0. Only support changing log level on log4j now as
- * HBase only uses log4j. You should do this by your own as it you know which log
- * framework you are using then set the log level to debug is very easy.
- */
- @Deprecated
- public void enableDebug(Class<?> clazz) {
- Log4jUtils.enableDebug(clazz);
- }
-
- /**
* Expire the Master's session
- * @throws Exception
*/
public void expireMasterSession() throws Exception {
HMaster master = getMiniHBaseCluster().getMaster();
@@ -2872,31 +2438,29 @@
}
private void decrementMinRegionServerCount(Configuration conf) {
- int currentCount = conf.getInt(
- ServerManager.WAIT_ON_REGIONSERVERS_MINTOSTART, -1);
+ int currentCount = conf.getInt(ServerManager.WAIT_ON_REGIONSERVERS_MINTOSTART, -1);
if (currentCount != -1) {
- conf.setInt(ServerManager.WAIT_ON_REGIONSERVERS_MINTOSTART,
- Math.max(currentCount - 1, 1));
+ conf.setInt(ServerManager.WAIT_ON_REGIONSERVERS_MINTOSTART, Math.max(currentCount - 1, 1));
}
}
public void expireSession(ZKWatcher nodeZK) throws Exception {
- expireSession(nodeZK, false);
+ expireSession(nodeZK, false);
}
/**
* Expire a ZooKeeper session as recommended in ZooKeeper documentation
* http://hbase.apache.org/book.html#trouble.zookeeper
+ * <p/>
* There are issues when doing this:
- * [1] http://www.mail-archive.com/dev@zookeeper.apache.org/msg01942.html
- * [2] https://issues.apache.org/jira/browse/ZOOKEEPER-1105
- *
+ * <ol>
+ * <li>http://www.mail-archive.com/dev@zookeeper.apache.org/msg01942.html</li>
+ * <li>https://issues.apache.org/jira/browse/ZOOKEEPER-1105</li>
+ * </ol>
* @param nodeZK - the ZK watcher to expire
- * @param checkStatus - true to check if we can create a Table with the
- * current configuration.
+ * @param checkStatus - true to check if we can create a Table with the current configuration.
*/
- public void expireSession(ZKWatcher nodeZK, boolean checkStatus)
- throws Exception {
+ public void expireSession(ZKWatcher nodeZK, boolean checkStatus) throws Exception {
Configuration c = new Configuration(this.conf);
String quorumServers = ZKConfig.getZKQuorumServersString(c);
ZooKeeper zk = nodeZK.getRecoverableZooKeeper().getZooKeeper();
@@ -2904,30 +2468,29 @@
long sessionID = zk.getSessionId();
// Expiry seems to be asynchronous (see comment from P. Hunt in [1]),
- // so we create a first watcher to be sure that the
- // event was sent. We expect that if our watcher receives the event
- // other watchers on the same machine will get is as well.
+ // so we create a first watcher to be sure that the
+ // event was sent. We expect that if our watcher receives the event
+ // other watchers on the same machine will get is as well.
// When we ask to close the connection, ZK does not close it before
- // we receive all the events, so don't have to capture the event, just
- // closing the connection should be enough.
- ZooKeeper monitor = new ZooKeeper(quorumServers,
- 1000, new org.apache.zookeeper.Watcher(){
+ // we receive all the events, so don't have to capture the event, just
+ // closing the connection should be enough.
+ ZooKeeper monitor = new ZooKeeper(quorumServers, 1000, new org.apache.zookeeper.Watcher() {
@Override
public void process(WatchedEvent watchedEvent) {
- LOG.info("Monitor ZKW received event="+watchedEvent);
+ LOG.info("Monitor ZKW received event=" + watchedEvent);
}
- } , sessionID, password);
+ }, sessionID, password);
// Making it expire
- ZooKeeper newZK = new ZooKeeper(quorumServers,
- 1000, EmptyWatcher.instance, sessionID, password);
+ ZooKeeper newZK =
+ new ZooKeeper(quorumServers, 1000, EmptyWatcher.instance, sessionID, password);
- //ensure that we have connection to the server before closing down, otherwise
- //the close session event will be eaten out before we start CONNECTING state
+ // ensure that we have connection to the server before closing down, otherwise
+ // the close session event will be eaten out before we start CONNECTING state
long start = EnvironmentEdgeManager.currentTime();
- while (newZK.getState() != States.CONNECTED
- && EnvironmentEdgeManager.currentTime() - start < 1000) {
- Thread.sleep(1);
+ while (newZK.getState() != States.CONNECTED &&
+ EnvironmentEdgeManager.currentTime() - start < 1000) {
+ Thread.sleep(1);
}
newZK.close();
LOG.info("ZK Closed Session 0x" + Long.toHexString(sessionID));
@@ -2942,7 +2505,6 @@
/**
* Get the Mini HBase cluster.
- *
* @return hbase cluster
* @see #getHBaseClusterInterface()
*/
@@ -2952,15 +2514,15 @@
/**
* Returns the HBaseCluster instance.
- * <p>Returned object can be any of the subclasses of HBaseCluster, and the
- * tests referring this should not assume that the cluster is a mini cluster or a
- * distributed one. If the test only works on a mini cluster, then specific
- * method {@link #getMiniHBaseCluster()} can be used instead w/o the
- * need to type-cast.
+ * <p>
+ * Returned object can be any of the subclasses of HBaseCluster, and the tests referring this
+ * should not assume that the cluster is a mini cluster or a distributed one. If the test only
+ * works on a mini cluster, then specific method {@link #getMiniHBaseCluster()} can be used
+ * instead w/o the need to type-cast.
*/
public HBaseClusterInterface getHBaseClusterInterface() {
- //implementation note: we should rename this method as #getHBaseCluster(),
- //but this would require refactoring 90+ calls.
+ // implementation note: we should rename this method as #getHBaseCluster(),
+ // but this would require refactoring 90+ calls.
return hbaseCluster;
}
@@ -2968,10 +2530,11 @@
* Resets the connections so that the next time getConnection() is called, a new connection is
* created. This is needed in cases where the entire cluster / all the masters are shutdown and
* the connection is not valid anymore.
+ * <p/>
* TODO: There should be a more coherent way of doing this. Unfortunately the way tests are
- * written, not all start() stop() calls go through this class. Most tests directly operate on
- * the underlying mini/local hbase cluster. That makes it difficult for this wrapper class to
- * maintain the connection state automatically. Cleaning this is a much bigger refactor.
+ * written, not all start() stop() calls go through this class. Most tests directly operate on the
+ * underlying mini/local hbase cluster. That makes it difficult for this wrapper class to maintain
+ * the connection state automatically. Cleaning this is a much bigger refactor.
*/
public void invalidateConnection() throws IOException {
closeConnection();
@@ -2979,14 +2542,13 @@
final String masterConfigBefore = conf.get(HConstants.MASTER_ADDRS_KEY);
final String masterConfAfter = getMiniHBaseCluster().getConf().get(HConstants.MASTER_ADDRS_KEY);
LOG.info("Invalidated connection. Updating master addresses before: {} after: {}",
- masterConfigBefore, masterConfAfter);
+ masterConfigBefore, masterConfAfter);
conf.set(HConstants.MASTER_ADDRS_KEY,
- getMiniHBaseCluster().getConf().get(HConstants.MASTER_ADDRS_KEY));
+ getMiniHBaseCluster().getConf().get(HConstants.MASTER_ADDRS_KEY));
}
/**
- * Get a shared Connection to the cluster.
- * this method is thread safe.
+ * Get a shared Connection to the cluster. this method is thread safe.
* @return A Connection that can be shared. Don't close. Will be closed on shutdown of cluster.
*/
public Connection getConnection() throws IOException {
@@ -2994,8 +2556,7 @@
}
/**
- * Get a assigned Connection to the cluster.
- * this method is thread safe.
+ * Get a assigned Connection to the cluster. this method is thread safe.
* @param user assigned user
* @return A Connection with assigned user.
*/
@@ -3004,9 +2565,9 @@
}
/**
- * Get a shared AsyncClusterConnection to the cluster.
- * this method is thread safe.
- * @return An AsyncClusterConnection that can be shared. Don't close. Will be closed on shutdown of cluster.
+ * Get a shared AsyncClusterConnection to the cluster. this method is thread safe.
+ * @return An AsyncClusterConnection that can be shared. Don't close. Will be closed on shutdown
+ * of cluster.
*/
public AsyncClusterConnection getAsyncConnection() throws IOException {
try {
@@ -3015,7 +2576,7 @@
try {
User user = UserProvider.instantiate(conf).getCurrent();
connection = getAsyncConnection(user);
- } catch(IOException ioe) {
+ } catch (IOException ioe) {
throw new UncheckedIOException("Failed to create connection", ioe);
}
}
@@ -3027,8 +2588,7 @@
}
/**
- * Get a assigned AsyncClusterConnection to the cluster.
- * this method is thread safe.
+ * Get a assigned AsyncClusterConnection to the cluster. this method is thread safe.
* @param user assigned user
* @return An AsyncClusterConnection with assigned user.
*/
@@ -3048,11 +2608,11 @@
}
/**
- * Returns an Admin instance which is shared between HBaseTestingUtility instance users.
- * Closing it has no effect, it will be closed automatically when the cluster shutdowns
+ * Returns an Admin instance which is shared between HBaseTestingUtility instance users. Closing
+ * it has no effect, it will be closed automatically when the cluster shutdowns
*/
public Admin getAdmin() throws IOException {
- if (hbaseAdmin == null){
+ if (hbaseAdmin == null) {
this.hbaseAdmin = getConnection().getAdmin();
}
return hbaseAdmin;
@@ -3069,8 +2629,7 @@
/**
* Unassign the named region.
- *
- * @param regionName The region to unassign.
+ * @param regionName The region to unassign.
*/
public void unassignRegion(String regionName) throws IOException {
unassignRegion(Bytes.toBytes(regionName));
@@ -3078,18 +2637,16 @@
/**
* Unassign the named region.
- *
- * @param regionName The region to unassign.
+ * @param regionName The region to unassign.
*/
public void unassignRegion(byte[] regionName) throws IOException {
- getAdmin().unassign(regionName, true);
+ getAdmin().unassign(regionName);
}
/**
* Closes the region containing the given row.
- *
- * @param row The row to find the containing region.
- * @param table The table to find the region.
+ * @param row The row to find the containing region.
+ * @param table The table to find the region.
*/
public void unassignRegionByRow(String row, RegionLocator table) throws IOException {
unassignRegionByRow(Bytes.toBytes(row), table);
@@ -3097,9 +2654,8 @@
/**
* Closes the region containing the given row.
- *
- * @param row The row to find the containing region.
- * @param table The table to find the region.
+ * @param row The row to find the containing region.
+ * @param table The table to find the region.
* @throws IOException
*/
public void unassignRegionByRow(byte[] row, RegionLocator table) throws IOException {
@@ -3127,7 +2683,7 @@
}
regCount = regions.size();
// There are chances that before we get the region for the table from an RS the region may
- // be going for CLOSE. This may be because online schema change is enabled
+ // be going for CLOSE. This may be because online schema change is enabled
if (regCount > 0) {
idx = random.nextInt(regCount);
// if we have just tried this region, there is no need to try again
@@ -3156,13 +2712,13 @@
/**
* Set the MiniDFSCluster
* @param cluster cluster to use
- * @param requireDown require the that cluster not be "up" (MiniDFSCluster#isClusterUp) before
- * it is set.
+ * @param requireDown require the that cluster not be "up" (MiniDFSCluster#isClusterUp) before it
+ * is set.
* @throws IllegalStateException if the passed cluster is up when it is required to be down
* @throws IOException if the FileSystem could not be set from the passed dfs cluster
*/
public void setDFSCluster(MiniDFSCluster cluster, boolean requireDown)
- throws IllegalStateException, IOException {
+ throws IllegalStateException, IOException {
if (dfsCluster != null && requireDown && dfsCluster.isClusterUp()) {
throw new IllegalStateException("DFSCluster is already running! Shut it down first.");
}
@@ -3175,19 +2731,16 @@
}
/**
- * Wait until all regions in a table have been assigned. Waits default timeout before giving up
+ * Wait until all regions in a table have been assigned. Waits default timeout before giving up
* (30 seconds).
* @param table Table to wait on.
- * @throws InterruptedException
- * @throws IOException
*/
- public void waitTableAvailable(TableName table)
- throws InterruptedException, IOException {
+ public void waitTableAvailable(TableName table) throws InterruptedException, IOException {
waitTableAvailable(table.getName(), 30000);
}
public void waitTableAvailable(TableName table, long timeoutMillis)
- throws InterruptedException, IOException {
+ throws InterruptedException, IOException {
waitFor(timeoutMillis, predicateTableAvailable(table));
}
@@ -3197,7 +2750,7 @@
* @param timeoutMillis Timeout.
*/
public void waitTableAvailable(byte[] table, long timeoutMillis)
- throws InterruptedException, IOException {
+ throws InterruptedException, IOException {
waitFor(timeoutMillis, predicateTableAvailable(TableName.valueOf(table)));
}
@@ -3228,7 +2781,7 @@
}
public String explainTableState(final TableName table, TableState.State state)
- throws IOException {
+ throws IOException {
TableState tableState = MetaTableAccessor.getTableState(getConnection(), table);
if (tableState == null) {
return "TableState in META: No table state in META for table " + table +
@@ -3256,84 +2809,72 @@
return true;
}
};
- MetaTableAccessor.scanMeta(getConnection(), null, null,
- ClientMetaTableAccessor.QueryType.TABLE, Integer.MAX_VALUE, visitor);
+ MetaTableAccessor.scanMeta(getConnection(), null, null, ClientMetaTableAccessor.QueryType.TABLE,
+ Integer.MAX_VALUE, visitor);
return lastTableState.get();
}
/**
- * Waits for a table to be 'enabled'. Enabled means that table is set as 'enabled' and the
- * regions have been all assigned. Will timeout after default period (30 seconds)
- * Tolerates nonexistent table.
+ * Waits for a table to be 'enabled'. Enabled means that table is set as 'enabled' and the regions
+ * have been all assigned. Will timeout after default period (30 seconds) Tolerates nonexistent
+ * table.
* @param table the table to wait on.
* @throws InterruptedException if interrupted while waiting
* @throws IOException if an IO problem is encountered
*/
- public void waitTableEnabled(TableName table)
- throws InterruptedException, IOException {
+ public void waitTableEnabled(TableName table) throws InterruptedException, IOException {
waitTableEnabled(table, 30000);
}
/**
- * Waits for a table to be 'enabled'. Enabled means that table is set as 'enabled' and the
- * regions have been all assigned.
+ * Waits for a table to be 'enabled'. Enabled means that table is set as 'enabled' and the regions
+ * have been all assigned.
* @see #waitTableEnabled(TableName, long)
* @param table Table to wait on.
* @param timeoutMillis Time to wait on it being marked enabled.
- * @throws InterruptedException
- * @throws IOException
*/
public void waitTableEnabled(byte[] table, long timeoutMillis)
- throws InterruptedException, IOException {
+ throws InterruptedException, IOException {
waitTableEnabled(TableName.valueOf(table), timeoutMillis);
}
- public void waitTableEnabled(TableName table, long timeoutMillis)
- throws IOException {
+ public void waitTableEnabled(TableName table, long timeoutMillis) throws IOException {
waitFor(timeoutMillis, predicateTableEnabled(table));
}
/**
- * Waits for a table to be 'disabled'. Disabled means that table is set as 'disabled'
- * Will timeout after default period (30 seconds)
+ * Waits for a table to be 'disabled'. Disabled means that table is set as 'disabled' Will timeout
+ * after default period (30 seconds)
* @param table Table to wait on.
- * @throws InterruptedException
- * @throws IOException
*/
- public void waitTableDisabled(byte[] table)
- throws InterruptedException, IOException {
+ public void waitTableDisabled(byte[] table) throws InterruptedException, IOException {
waitTableDisabled(table, 30000);
}
public void waitTableDisabled(TableName table, long millisTimeout)
- throws InterruptedException, IOException {
+ throws InterruptedException, IOException {
waitFor(millisTimeout, predicateTableDisabled(table));
}
/**
- * Waits for a table to be 'disabled'. Disabled means that table is set as 'disabled'
+ * Waits for a table to be 'disabled'. Disabled means that table is set as 'disabled'
* @param table Table to wait on.
* @param timeoutMillis Time to wait on it being marked disabled.
- * @throws InterruptedException
- * @throws IOException
*/
public void waitTableDisabled(byte[] table, long timeoutMillis)
- throws InterruptedException, IOException {
+ throws InterruptedException, IOException {
waitTableDisabled(TableName.valueOf(table), timeoutMillis);
}
/**
- * Make sure that at least the specified number of region servers
- * are running
+ * Make sure that at least the specified number of region servers are running
* @param num minimum number of region servers that should be running
* @return true if we started some servers
- * @throws IOException
*/
- public boolean ensureSomeRegionServersAvailable(final int num)
- throws IOException {
+ public boolean ensureSomeRegionServersAvailable(final int num) throws IOException {
boolean startedServer = false;
SingleProcessHBaseCluster hbaseCluster = getMiniHBaseCluster();
- for (int i=hbaseCluster.getLiveRegionServerThreads().size(); i<num; ++i) {
+ for (int i = hbaseCluster.getLiveRegionServerThreads().size(); i < num; ++i) {
LOG.info("Started new server=" + hbaseCluster.startRegionServer());
startedServer = true;
}
@@ -3341,70 +2882,59 @@
return startedServer;
}
-
/**
- * Make sure that at least the specified number of region servers
- * are running. We don't count the ones that are currently stopping or are
- * stopped.
+ * Make sure that at least the specified number of region servers are running. We don't count the
+ * ones that are currently stopping or are stopped.
* @param num minimum number of region servers that should be running
* @return true if we started some servers
- * @throws IOException
*/
- public boolean ensureSomeNonStoppedRegionServersAvailable(final int num)
- throws IOException {
+ public boolean ensureSomeNonStoppedRegionServersAvailable(final int num) throws IOException {
boolean startedServer = ensureSomeRegionServersAvailable(num);
int nonStoppedServers = 0;
- for (JVMClusterUtil.RegionServerThread rst :
- getMiniHBaseCluster().getRegionServerThreads()) {
+ for (JVMClusterUtil.RegionServerThread rst : getMiniHBaseCluster().getRegionServerThreads()) {
HRegionServer hrs = rst.getRegionServer();
if (hrs.isStopping() || hrs.isStopped()) {
- LOG.info("A region server is stopped or stopping:"+hrs);
+ LOG.info("A region server is stopped or stopping:" + hrs);
} else {
nonStoppedServers++;
}
}
- for (int i=nonStoppedServers; i<num; ++i) {
+ for (int i = nonStoppedServers; i < num; ++i) {
LOG.info("Started new server=" + getMiniHBaseCluster().startRegionServer());
startedServer = true;
}
return startedServer;
}
-
/**
- * This method clones the passed <code>c</code> configuration setting a new
- * user into the clone. Use it getting new instances of FileSystem. Only
- * works for DistributedFileSystem w/o Kerberos.
+ * This method clones the passed <code>c</code> configuration setting a new user into the clone.
+ * Use it getting new instances of FileSystem. Only works for DistributedFileSystem w/o Kerberos.
* @param c Initial configuration
* @param differentiatingSuffix Suffix to differentiate this user from others.
* @return A new configuration instance with a different user set into it.
- * @throws IOException
*/
- public static User getDifferentUser(final Configuration c,
- final String differentiatingSuffix)
- throws IOException {
+ public static User getDifferentUser(final Configuration c, final String differentiatingSuffix)
+ throws IOException {
FileSystem currentfs = FileSystem.get(c);
if (!(currentfs instanceof DistributedFileSystem) || User.isHBaseSecurityEnabled(c)) {
return User.getCurrent();
}
- // Else distributed filesystem. Make a new instance per daemon. Below
+ // Else distributed filesystem. Make a new instance per daemon. Below
// code is taken from the AppendTestUtil over in hdfs.
- String username = User.getCurrent().getName() +
- differentiatingSuffix;
- User user = User.createUserForTesting(c, username,
- new String[]{"supergroup"});
+ String username = User.getCurrent().getName() + differentiatingSuffix;
+ User user = User.createUserForTesting(c, username, new String[] { "supergroup" });
return user;
}
public static NavigableSet<String> getAllOnlineRegions(SingleProcessHBaseCluster cluster)
- throws IOException {
+ throws IOException {
NavigableSet<String> online = new TreeSet<>();
for (RegionServerThread rst : cluster.getLiveRegionServerThreads()) {
try {
- for (RegionInfo region :
- ProtobufUtil.getOnlineRegions(rst.getRegionServer().getRSRpcServices())) {
+ for (RegionInfo region : ProtobufUtil
+ .getOnlineRegions(rst.getRegionServer().getRSRpcServices())) {
online.add(region.getRegionNameAsString());
}
} catch (RegionServerStoppedException e) {
@@ -3413,8 +2943,7 @@
}
for (MasterThread mt : cluster.getLiveMasterThreads()) {
try {
- for (RegionInfo region :
- ProtobufUtil.getOnlineRegions(mt.getMaster().getRSRpcServices())) {
+ for (RegionInfo region : ProtobufUtil.getOnlineRegions(mt.getMaster().getRSRpcServices())) {
online.add(region.getRegionNameAsString());
}
} catch (RegionServerStoppedException e) {
@@ -3427,26 +2956,22 @@
}
/**
- * Set maxRecoveryErrorCount in DFSClient. In 0.20 pre-append its hard-coded to 5 and
- * makes tests linger. Here is the exception you'll see:
+ * Set maxRecoveryErrorCount in DFSClient. In 0.20 pre-append its hard-coded to 5 and makes tests
+ * linger. Here is the exception you'll see:
+ *
* <pre>
* 2010-06-15 11:52:28,511 WARN [DataStreamer for file /hbase/.logs/wal.1276627923013 block
* blk_928005470262850423_1021] hdfs.DFSClient$DFSOutputStream(2657): Error Recovery for block
* blk_928005470262850423_1021 failed because recovery from primary datanode 127.0.0.1:53683
* failed 4 times. Pipeline was 127.0.0.1:53687, 127.0.0.1:53683. Will retry...
* </pre>
+ *
* @param stream A DFSClient.DFSOutputStream.
- * @param max
- * @throws NoSuchFieldException
- * @throws SecurityException
- * @throws IllegalAccessException
- * @throws IllegalArgumentException
*/
- public static void setMaxRecoveryErrorCount(final OutputStream stream,
- final int max) {
+ public static void setMaxRecoveryErrorCount(final OutputStream stream, final int max) {
try {
- Class<?> [] clazzes = DFSClient.class.getDeclaredClasses();
- for (Class<?> clazz: clazzes) {
+ Class<?>[] clazzes = DFSClient.class.getDeclaredClasses();
+ for (Class<?> clazz : clazzes) {
String className = clazz.getSimpleName();
if (className.equals("DFSOutputStream")) {
if (clazz.isInstance(stream)) {
@@ -3469,7 +2994,7 @@
* @return true if the region is assigned false otherwise.
*/
public boolean assignRegion(final RegionInfo regionInfo)
- throws IOException, InterruptedException {
+ throws IOException, InterruptedException {
final AssignmentManager am = getHBaseCluster().getMaster().getAssignmentManager();
am.assign(regionInfo);
return AssignmentTestingUtil.waitForAssignment(am, regionInfo);
@@ -3477,20 +3002,17 @@
/**
* Move region to destination server and wait till region is completely moved and online
- *
* @param destRegion region to move
* @param destServer destination server of the region
- * @throws InterruptedException
- * @throws IOException
*/
public void moveRegionAndWait(RegionInfo destRegion, ServerName destServer)
- throws InterruptedException, IOException {
+ throws InterruptedException, IOException {
HMaster master = getMiniHBaseCluster().getMaster();
// TODO: Here we start the move. The move can take a while.
getAdmin().move(destRegion.getEncodedNameAsBytes(), destServer);
while (true) {
- ServerName serverName = master.getAssignmentManager().getRegionStates()
- .getRegionServerOfRegion(destRegion);
+ ServerName serverName =
+ master.getAssignmentManager().getRegionStates().getRegionServerOfRegion(destRegion);
if (serverName != null && serverName.equals(destServer)) {
assertRegionOnServer(destRegion, serverName, 2000);
break;
@@ -3500,13 +3022,10 @@
}
/**
- * Wait until all regions for a table in hbase:meta have a non-empty
- * info:server, up to a configuable timeout value (default is 60 seconds)
- * This means all regions have been deployed,
- * master has been informed and updated hbase:meta with the regions deployed
- * server.
+ * Wait until all regions for a table in hbase:meta have a non-empty info:server, up to a
+ * configuable timeout value (default is 60 seconds) This means all regions have been deployed,
+ * master has been informed and updated hbase:meta with the regions deployed server.
* @param tableName the table name
- * @throws IOException
*/
public void waitUntilAllRegionsAssigned(final TableName tableName) throws IOException {
waitUntilAllRegionsAssigned(tableName,
@@ -3515,27 +3034,24 @@
/**
* Waith until all system table's regions get assigned
- * @throws IOException
*/
public void waitUntilAllSystemRegionsAssigned() throws IOException {
waitUntilAllRegionsAssigned(TableName.META_TABLE_NAME);
}
/**
- * Wait until all regions for a table in hbase:meta have a non-empty
- * info:server, or until timeout. This means all regions have been deployed,
- * master has been informed and updated hbase:meta with the regions deployed
- * server.
+ * Wait until all regions for a table in hbase:meta have a non-empty info:server, or until
+ * timeout. This means all regions have been deployed, master has been informed and updated
+ * hbase:meta with the regions deployed server.
* @param tableName the table name
* @param timeout timeout, in milliseconds
- * @throws IOException
*/
public void waitUntilAllRegionsAssigned(final TableName tableName, final long timeout)
- throws IOException {
+ throws IOException {
if (!TableName.isMetaTableName(tableName)) {
try (final Table meta = getConnection().getTable(TableName.META_TABLE_NAME)) {
LOG.debug("Waiting until all regions of table " + tableName + " get assigned. Timeout = " +
- timeout + "ms");
+ timeout + "ms");
waitFor(timeout, 200, true, new ExplainingPredicate<IOException>() {
@Override
public String explainFailure() throws IOException {
@@ -3557,17 +3073,17 @@
// (for fault tolerance testing).
tableFound = true;
byte[] server =
- r.getValue(HConstants.CATALOG_FAMILY, HConstants.SERVER_QUALIFIER);
+ r.getValue(HConstants.CATALOG_FAMILY, HConstants.SERVER_QUALIFIER);
if (server == null) {
return false;
} else {
byte[] startCode =
- r.getValue(HConstants.CATALOG_FAMILY, HConstants.STARTCODE_QUALIFIER);
+ r.getValue(HConstants.CATALOG_FAMILY, HConstants.STARTCODE_QUALIFIER);
ServerName serverName =
- ServerName.valueOf(Bytes.toString(server).replaceFirst(":", ",") + "," +
- Bytes.toLong(startCode));
+ ServerName.valueOf(Bytes.toString(server).replaceFirst(":", ",") + "," +
+ Bytes.toLong(startCode));
if (!getHBaseClusterInterface().isDistributedCluster() &&
- getHBaseCluster().isKilledRS(serverName)) {
+ getHBaseCluster().isKilledRS(serverName)) {
return false;
}
}
@@ -3578,7 +3094,8 @@
}
}
if (!tableFound) {
- LOG.warn("Didn't find the entries for table " + tableName + " in meta, already deleted?");
+ LOG.warn(
+ "Didn't find the entries for table " + tableName + " in meta, already deleted?");
}
return tableFound;
}
@@ -3609,17 +3126,16 @@
}
/**
- * Do a small get/scan against one store. This is required because store
- * has no actual methods of querying itself, and relies on StoreScanner.
+ * Do a small get/scan against one store. This is required because store has no actual methods of
+ * querying itself, and relies on StoreScanner.
*/
- public static List<Cell> getFromStoreFile(HStore store,
- Get get) throws IOException {
+ public static List<Cell> getFromStoreFile(HStore store, Get get) throws IOException {
Scan scan = new Scan(get);
InternalScanner scanner = (InternalScanner) store.getScanner(scan,
- scan.getFamilyMap().get(store.getColumnFamilyDescriptor().getName()),
- // originally MultiVersionConcurrencyControl.resetThreadReadPoint() was called to set
- // readpoint 0.
- 0);
+ scan.getFamilyMap().get(store.getColumnFamilyDescriptor().getName()),
+ // originally MultiVersionConcurrencyControl.resetThreadReadPoint() was called to set
+ // readpoint 0.
+ 0);
List<Cell> result = new ArrayList<>();
scanner.next(result);
@@ -3636,47 +3152,42 @@
/**
* Create region split keys between startkey and endKey
- *
- * @param startKey
- * @param endKey
* @param numRegions the number of regions to be created. it has to be greater than 3.
* @return resulting split keys
*/
- public byte[][] getRegionSplitStartKeys(byte[] startKey, byte[] endKey, int numRegions){
- assertTrue(numRegions>3);
- byte [][] tmpSplitKeys = Bytes.split(startKey, endKey, numRegions - 3);
- byte [][] result = new byte[tmpSplitKeys.length+1][];
+ public byte[][] getRegionSplitStartKeys(byte[] startKey, byte[] endKey, int numRegions) {
+ assertTrue(numRegions > 3);
+ byte[][] tmpSplitKeys = Bytes.split(startKey, endKey, numRegions - 3);
+ byte[][] result = new byte[tmpSplitKeys.length + 1][];
System.arraycopy(tmpSplitKeys, 0, result, 1, tmpSplitKeys.length);
result[0] = HConstants.EMPTY_BYTE_ARRAY;
return result;
}
/**
- * Do a small get/scan against one store. This is required because store
- * has no actual methods of querying itself, and relies on StoreScanner.
+ * Do a small get/scan against one store. This is required because store has no actual methods of
+ * querying itself, and relies on StoreScanner.
*/
- public static List<Cell> getFromStoreFile(HStore store,
- byte [] row,
- NavigableSet<byte[]> columns
- ) throws IOException {
+ public static List<Cell> getFromStoreFile(HStore store, byte[] row, NavigableSet<byte[]> columns)
+ throws IOException {
Get get = new Get(row);
Map<byte[], NavigableSet<byte[]>> s = get.getFamilyMap();
s.put(store.getColumnFamilyDescriptor().getName(), columns);
- return getFromStoreFile(store,get);
+ return getFromStoreFile(store, get);
}
- public static void assertKVListsEqual(String additionalMsg,
- final List<? extends Cell> expected,
- final List<? extends Cell> actual) {
+ public static void assertKVListsEqual(String additionalMsg, final List<? extends Cell> expected,
+ final List<? extends Cell> actual) {
final int eLen = expected.size();
final int aLen = actual.size();
final int minLen = Math.min(eLen, aLen);
- int i;
- for (i = 0; i < minLen
- && CellComparator.getInstance().compare(expected.get(i), actual.get(i)) == 0;
- ++i) {}
+ int i = 0;
+ while (i < minLen &&
+ CellComparator.getInstance().compare(expected.get(i), actual.get(i)) == 0) {
+ i++;
+ }
if (additionalMsg == null) {
additionalMsg = "";
@@ -3686,10 +3197,9 @@
}
if (eLen != aLen || i != minLen) {
- throw new AssertionError(
- "Expected and actual KV arrays differ at position " + i + ": " +
- safeGetAsStr(expected, i) + " (length " + eLen +") vs. " +
- safeGetAsStr(actual, i) + " (length " + aLen + ")" + additionalMsg);
+ throw new AssertionError("Expected and actual KV arrays differ at position " + i + ": " +
+ safeGetAsStr(expected, i) + " (length " + eLen + ") vs. " + safeGetAsStr(actual, i) +
+ " (length " + aLen + ")" + additionalMsg);
}
}
@@ -3702,26 +3212,20 @@
}
public String getClusterKey() {
- return conf.get(HConstants.ZOOKEEPER_QUORUM) + ":"
- + conf.get(HConstants.ZOOKEEPER_CLIENT_PORT) + ":"
- + conf.get(HConstants.ZOOKEEPER_ZNODE_PARENT,
- HConstants.DEFAULT_ZOOKEEPER_ZNODE_PARENT);
+ return conf.get(HConstants.ZOOKEEPER_QUORUM) + ":" +
+ conf.get(HConstants.ZOOKEEPER_CLIENT_PORT) + ":" +
+ conf.get(HConstants.ZOOKEEPER_ZNODE_PARENT, HConstants.DEFAULT_ZOOKEEPER_ZNODE_PARENT);
}
- /** Creates a random table with the given parameters */
- public Table createRandomTable(TableName tableName,
- final Collection<String> families,
- final int maxVersions,
- final int numColsPerRow,
- final int numFlushes,
- final int numRegions,
- final int numRowsPerFlush)
- throws IOException, InterruptedException {
-
- LOG.info("\n\nCreating random table " + tableName + " with " + numRegions +
- " regions, " + numFlushes + " storefiles per region, " +
- numRowsPerFlush + " rows per flush, maxVersions=" + maxVersions +
- "\n");
+ /**
+ * Creates a random table with the given parameters
+ */
+ public Table createRandomTable(TableName tableName, final Collection<String> families,
+ final int maxVersions, final int numColsPerRow, final int numFlushes, final int numRegions,
+ final int numRowsPerFlush) throws IOException, InterruptedException {
+ LOG.info("\n\nCreating random table " + tableName + " with " + numRegions + " regions, " +
+ numFlushes + " storefiles per region, " + numRowsPerFlush + " rows per flush, maxVersions=" +
+ maxVersions + "\n");
final Random rand = new Random(tableName.hashCode() * 17L + 12938197137L);
final int numCF = families.size();
@@ -3739,11 +3243,9 @@
final int splitStartKey = actualStartKey + keysPerRegion;
final int splitEndKey = actualEndKey - keysPerRegion;
final String keyFormat = "%08x";
- final Table table = createTable(tableName, cfBytes,
- maxVersions,
- Bytes.toBytes(String.format(keyFormat, splitStartKey)),
- Bytes.toBytes(String.format(keyFormat, splitEndKey)),
- numRegions);
+ final Table table = createTable(tableName, cfBytes, maxVersions,
+ Bytes.toBytes(String.format(keyFormat, splitStartKey)),
+ Bytes.toBytes(String.format(keyFormat, splitEndKey)), numRegions);
if (hbaseCluster != null) {
getMiniHBaseCluster().flushcache(TableName.META_TABLE_NAME);
@@ -3753,8 +3255,8 @@
for (int iFlush = 0; iFlush < numFlushes; ++iFlush) {
for (int iRow = 0; iRow < numRowsPerFlush; ++iRow) {
- final byte[] row = Bytes.toBytes(String.format(keyFormat,
- actualStartKey + rand.nextInt(actualEndKey - actualStartKey)));
+ final byte[] row = Bytes.toBytes(
+ String.format(keyFormat, actualStartKey + rand.nextInt(actualEndKey - actualStartKey)));
Put put = new Put(row);
Delete del = new Delete(row);
@@ -3763,9 +3265,9 @@
final long ts = rand.nextInt();
final byte[] qual = Bytes.toBytes("col" + iCol);
if (rand.nextBoolean()) {
- final byte[] value = Bytes.toBytes("value_for_row_" + iRow +
- "_cf_" + Bytes.toStringBinary(cf) + "_col_" + iCol + "_ts_" +
- ts + "_random_" + rand.nextLong());
+ final byte[] value =
+ Bytes.toBytes("value_for_row_" + iRow + "_cf_" + Bytes.toStringBinary(cf) + "_col_" +
+ iCol + "_ts_" + ts + "_random_" + rand.nextLong());
put.addColumn(cf, qual, ts, value);
} else if (rand.nextDouble() < 0.8) {
del.addColumn(cf, qual, ts);
@@ -3796,12 +3298,12 @@
public static int randomFreePort() {
return HBaseCommonTestingUtil.randomFreePort();
}
+
public static String randomMultiCastAddress() {
return "226.1.1." + random.nextInt(254);
}
- public static void waitForHostPort(String host, int port)
- throws IOException {
+ public static void waitForHostPort(String host, int port) throws IOException {
final int maxTimeMs = 10000;
final int maxNumAttempts = maxTimeMs / HConstants.SOCKET_RETRY_WAIT_MS;
IOException savedException = null;
@@ -3827,20 +3329,20 @@
}
/**
- * Creates a pre-split table for load testing. If the table already exists,
- * logs a warning and continues.
+ * Creates a pre-split table for load testing. If the table already exists, logs a warning and
+ * continues.
* @return the number of regions the table was split into
*/
- public static int createPreSplitLoadTestTable(Configuration conf,
- TableName tableName, byte[] columnFamily, Algorithm compression,
- DataBlockEncoding dataBlockEncoding) throws IOException {
- return createPreSplitLoadTestTable(conf, tableName,
- columnFamily, compression, dataBlockEncoding, DEFAULT_REGIONS_PER_SERVER, 1,
- Durability.USE_DEFAULT);
+ public static int createPreSplitLoadTestTable(Configuration conf, TableName tableName,
+ byte[] columnFamily, Algorithm compression, DataBlockEncoding dataBlockEncoding)
+ throws IOException {
+ return createPreSplitLoadTestTable(conf, tableName, columnFamily, compression,
+ dataBlockEncoding, DEFAULT_REGIONS_PER_SERVER, 1, Durability.USE_DEFAULT);
}
+
/**
- * Creates a pre-split table for load testing. If the table already exists,
- * logs a warning and continues.
+ * Creates a pre-split table for load testing. If the table already exists, logs a warning and
+ * continues.
* @return the number of regions the table was split into
*/
public static int createPreSplitLoadTestTable(Configuration conf, TableName tableName,
@@ -3858,8 +3360,8 @@
}
/**
- * Creates a pre-split table for load testing. If the table already exists,
- * logs a warning and continues.
+ * Creates a pre-split table for load testing. If the table already exists, logs a warning and
+ * continues.
* @return the number of regions the table was split into
*/
public static int createPreSplitLoadTestTable(Configuration conf, TableName tableName,
@@ -3880,46 +3382,45 @@
}
/**
- * Creates a pre-split table for load testing. If the table already exists,
- * logs a warning and continues.
+ * Creates a pre-split table for load testing. If the table already exists, logs a warning and
+ * continues.
* @return the number of regions the table was split into
*/
- public static int createPreSplitLoadTestTable(Configuration conf,
- TableDescriptor desc, ColumnFamilyDescriptor hcd) throws IOException {
+ public static int createPreSplitLoadTestTable(Configuration conf, TableDescriptor desc,
+ ColumnFamilyDescriptor hcd) throws IOException {
return createPreSplitLoadTestTable(conf, desc, hcd, DEFAULT_REGIONS_PER_SERVER);
}
/**
- * Creates a pre-split table for load testing. If the table already exists,
- * logs a warning and continues.
+ * Creates a pre-split table for load testing. If the table already exists, logs a warning and
+ * continues.
* @return the number of regions the table was split into
*/
- public static int createPreSplitLoadTestTable(Configuration conf,
- TableDescriptor desc, ColumnFamilyDescriptor hcd, int numRegionsPerServer) throws IOException {
- return createPreSplitLoadTestTable(conf, desc, new ColumnFamilyDescriptor[] {hcd},
- numRegionsPerServer);
+ public static int createPreSplitLoadTestTable(Configuration conf, TableDescriptor desc,
+ ColumnFamilyDescriptor hcd, int numRegionsPerServer) throws IOException {
+ return createPreSplitLoadTestTable(conf, desc, new ColumnFamilyDescriptor[] { hcd },
+ numRegionsPerServer);
}
/**
- * Creates a pre-split table for load testing. If the table already exists,
- * logs a warning and continues.
+ * Creates a pre-split table for load testing. If the table already exists, logs a warning and
+ * continues.
* @return the number of regions the table was split into
*/
- public static int createPreSplitLoadTestTable(Configuration conf,
- TableDescriptor desc, ColumnFamilyDescriptor[] hcds,
- int numRegionsPerServer) throws IOException {
- return createPreSplitLoadTestTable(conf, desc, hcds,
- new RegionSplitter.HexStringSplit(), numRegionsPerServer);
+ public static int createPreSplitLoadTestTable(Configuration conf, TableDescriptor desc,
+ ColumnFamilyDescriptor[] hcds, int numRegionsPerServer) throws IOException {
+ return createPreSplitLoadTestTable(conf, desc, hcds, new RegionSplitter.HexStringSplit(),
+ numRegionsPerServer);
}
/**
- * Creates a pre-split table for load testing. If the table already exists,
- * logs a warning and continues.
+ * Creates a pre-split table for load testing. If the table already exists, logs a warning and
+ * continues.
* @return the number of regions the table was split into
*/
- public static int createPreSplitLoadTestTable(Configuration conf,
- TableDescriptor td, ColumnFamilyDescriptor[] cds,
- SplitAlgorithm splitter, int numRegionsPerServer) throws IOException {
+ public static int createPreSplitLoadTestTable(Configuration conf, TableDescriptor td,
+ ColumnFamilyDescriptor[] cds, SplitAlgorithm splitter, int numRegionsPerServer)
+ throws IOException {
TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(td);
for (ColumnFamilyDescriptor cd : cds) {
if (!td.hasColumnFamily(cd.getName())) {
@@ -3934,27 +3435,25 @@
try {
// create a table a pre-splits regions.
// The number of splits is set as:
- // region servers * regions per region server).
+ // region servers * regions per region server).
int numberOfServers = admin.getRegionServers().size();
if (numberOfServers == 0) {
throw new IllegalStateException("No live regionservers");
}
totalNumberOfRegions = numberOfServers * numRegionsPerServer;
- LOG.info("Number of live regionservers: " + numberOfServers + ", " +
- "pre-splitting table into " + totalNumberOfRegions + " regions " +
- "(regions per server: " + numRegionsPerServer + ")");
+ LOG.info(
+ "Number of live regionservers: " + numberOfServers + ", " + "pre-splitting table into " +
+ totalNumberOfRegions + " regions " + "(regions per server: " + numRegionsPerServer + ")");
- byte[][] splits = splitter.split(
- totalNumberOfRegions);
+ byte[][] splits = splitter.split(totalNumberOfRegions);
admin.createTable(td, splits);
} catch (MasterNotRunningException e) {
LOG.error("Master not running", e);
throw new IOException(e);
} catch (TableExistsException e) {
- LOG.warn("Table " + td.getTableName() +
- " already exists, continuing");
+ LOG.warn("Table " + td.getTableName() + " already exists, continuing");
} finally {
admin.close();
unmanagedConnection.close();
@@ -3969,14 +3468,11 @@
}
/**
- * Due to async racing issue, a region may not be in
- * the online region list of a region server yet, after
- * the assignment znode is deleted and the new assignment
- * is recorded in master.
+ * Due to async racing issue, a region may not be in the online region list of a region server
+ * yet, after the assignment znode is deleted and the new assignment is recorded in master.
*/
- public void assertRegionOnServer(
- final RegionInfo hri, final ServerName server,
- final long timeout) throws IOException, InterruptedException {
+ public void assertRegionOnServer(final RegionInfo hri, final ServerName server,
+ final long timeout) throws IOException, InterruptedException {
long timeoutTime = EnvironmentEdgeManager.currentTime() + timeout;
while (true) {
List<RegionInfo> regions = getAdmin().getRegions(server);
@@ -3985,30 +3481,27 @@
if (now > timeoutTime) break;
Thread.sleep(10);
}
- fail("Could not find region " + hri.getRegionNameAsString()
- + " on server " + server);
+ fail("Could not find region " + hri.getRegionNameAsString() + " on server " + server);
}
/**
- * Check to make sure the region is open on the specified
- * region server, but not on any other one.
+ * Check to make sure the region is open on the specified region server, but not on any other one.
*/
- public void assertRegionOnlyOnServer(
- final RegionInfo hri, final ServerName server,
- final long timeout) throws IOException, InterruptedException {
+ public void assertRegionOnlyOnServer(final RegionInfo hri, final ServerName server,
+ final long timeout) throws IOException, InterruptedException {
long timeoutTime = EnvironmentEdgeManager.currentTime() + timeout;
while (true) {
List<RegionInfo> regions = getAdmin().getRegions(server);
if (regions.stream().anyMatch(r -> RegionInfo.COMPARATOR.compare(r, hri) == 0)) {
List<JVMClusterUtil.RegionServerThread> rsThreads =
getHBaseCluster().getLiveRegionServerThreads();
- for (JVMClusterUtil.RegionServerThread rsThread: rsThreads) {
+ for (JVMClusterUtil.RegionServerThread rsThread : rsThreads) {
HRegionServer rs = rsThread.getRegionServer();
if (server.equals(rs.getServerName())) {
continue;
}
Collection<HRegion> hrs = rs.getOnlineRegionsLocalContext();
- for (HRegion r: hrs) {
+ for (HRegion r : hrs) {
assertTrue("Region should not be double assigned",
r.getRegionInfo().getRegionId() != hri.getRegionId());
}
@@ -4019,21 +3512,20 @@
if (now > timeoutTime) break;
Thread.sleep(10);
}
- fail("Could not find region " + hri.getRegionNameAsString()
- + " on server " + server);
+ fail("Could not find region " + hri.getRegionNameAsString() + " on server " + server);
}
public HRegion createTestRegion(String tableName, ColumnFamilyDescriptor cd) throws IOException {
TableDescriptor td =
- TableDescriptorBuilder.newBuilder(TableName.valueOf(tableName)).setColumnFamily(cd).build();
+ TableDescriptorBuilder.newBuilder(TableName.valueOf(tableName)).setColumnFamily(cd).build();
RegionInfo info = RegionInfoBuilder.newBuilder(TableName.valueOf(tableName)).build();
return createRegionAndWAL(info, getDataTestDir(), getConfiguration(), td);
}
public HRegion createTestRegion(String tableName, ColumnFamilyDescriptor cd,
- BlockCache blockCache) throws IOException {
+ BlockCache blockCache) throws IOException {
TableDescriptor td =
- TableDescriptorBuilder.newBuilder(TableName.valueOf(tableName)).setColumnFamily(cd).build();
+ TableDescriptorBuilder.newBuilder(TableName.valueOf(tableName)).setColumnFamily(cd).build();
RegionInfo info = RegionInfoBuilder.newBuilder(TableName.valueOf(tableName)).build();
return createRegionAndWAL(info, getDataTestDir(), getConfiguration(), td, blockCache);
}
@@ -4049,8 +3541,8 @@
return new ExplainingPredicate<IOException>() {
@Override
public String explainFailure() throws IOException {
- final RegionStates regionStates = getMiniHBaseCluster().getMaster()
- .getAssignmentManager().getRegionStates();
+ final RegionStates regionStates =
+ getMiniHBaseCluster().getMaster().getAssignmentManager().getRegionStates();
return "found in transition: " + regionStates.getRegionsInTransition().toString();
}
@@ -4116,10 +3608,10 @@
try (Table table = getConnection().getTable(tableName)) {
TableDescriptor htd = table.getDescriptor();
for (HRegionLocation loc : getConnection().getRegionLocator(tableName)
- .getAllRegionLocations()) {
+ .getAllRegionLocations()) {
Scan scan = new Scan().withStartRow(loc.getRegion().getStartKey())
- .withStopRow(loc.getRegion().getEndKey()).setOneRowLimit()
- .setMaxResultsPerColumnFamily(1).setCacheBlocks(false);
+ .withStopRow(loc.getRegion().getEndKey()).setOneRowLimit()
+ .setMaxResultsPerColumnFamily(1).setCacheBlocks(false);
for (byte[] family : htd.getColumnFamilyNames()) {
scan.addFamily(family);
}
@@ -4137,7 +3629,6 @@
/**
* Wait until no regions in transition.
* @param timeout How long to wait.
- * @throws IOException
*/
public void waitUntilNoRegionsInTransition(final long timeout) throws IOException {
waitFor(timeout, predicateNoRegionsInTransition());
@@ -4153,8 +3644,6 @@
/**
* Wait until labels is ready in VisibilityLabelsCache.
- * @param timeoutMillis
- * @param labels
*/
public void waitLabelAvailable(long timeoutMillis, final String... labels) {
final VisibilityLabelsCache labelsCache = VisibilityLabelsCache.get();
@@ -4183,8 +3672,8 @@
}
/**
- * Create a set of column descriptors with the combination of compression,
- * encoding, bloom codecs available.
+ * Create a set of column descriptors with the combination of compression, encoding, bloom codecs
+ * available.
* @return the list of column descriptors
*/
public static List<ColumnFamilyDescriptor> generateColumnDescriptors() {
@@ -4192,17 +3681,17 @@
}
/**
- * Create a set of column descriptors with the combination of compression,
- * encoding, bloom codecs available.
+ * Create a set of column descriptors with the combination of compression, encoding, bloom codecs
+ * available.
* @param prefix family names prefix
* @return the list of column descriptors
*/
public static List<ColumnFamilyDescriptor> generateColumnDescriptors(final String prefix) {
List<ColumnFamilyDescriptor> columnFamilyDescriptors = new ArrayList<>();
long familyId = 0;
- for (Compression.Algorithm compressionType: getSupportedCompressionAlgorithms()) {
- for (DataBlockEncoding encodingType: DataBlockEncoding.values()) {
- for (BloomType bloomType: BloomType.values()) {
+ for (Compression.Algorithm compressionType : getSupportedCompressionAlgorithms()) {
+ for (DataBlockEncoding encodingType : DataBlockEncoding.values()) {
+ for (BloomType bloomType : BloomType.values()) {
String name = String.format("%s-cf-!@#&-%d!@#", prefix, familyId);
ColumnFamilyDescriptorBuilder columnFamilyDescriptorBuilder =
ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes(name));
@@ -4261,10 +3750,9 @@
}
/**
- * Sets up {@link MiniKdc} for testing security.
- * Uses {@link HBaseKerberosUtils} to set the given keytab file as
- * {@link HBaseKerberosUtils#KRB_KEYTAB_FILE}.
- * FYI, there is also the easier-to-use kerby KDC server and utility for using it,
+ * Sets up {@link MiniKdc} for testing security. Uses {@link HBaseKerberosUtils} to set the given
+ * keytab file as {@link HBaseKerberosUtils#KRB_KEYTAB_FILE}. FYI, there is also the easier-to-use
+ * kerby KDC server and utility for using it,
* {@link org.apache.hadoop.hbase.util.SimpleKdcServerUtil}. The kerby KDC server is preferred;
* less baggage. It came in in HBASE-5291.
*/
@@ -4284,7 +3772,7 @@
kdc = new MiniKdc(conf, dir);
kdc.start();
} catch (BindException e) {
- FileUtils.deleteDirectory(dir); // clean directory
+ FileUtils.deleteDirectory(dir); // clean directory
numTries++;
if (numTries == 3) {
LOG.error("Failed setting up MiniKDC. Tried " + numTries + " times.");
@@ -4301,14 +3789,13 @@
public int getNumHFiles(final TableName tableName, final byte[] family) {
int numHFiles = 0;
for (RegionServerThread regionServerThread : getMiniHBaseCluster().getRegionServerThreads()) {
- numHFiles+= getNumHFilesForRS(regionServerThread.getRegionServer(), tableName,
- family);
+ numHFiles += getNumHFilesForRS(regionServerThread.getRegionServer(), tableName, family);
}
return numHFiles;
}
public int getNumHFilesForRS(final HRegionServer rs, final TableName tableName,
- final byte[] family) {
+ final byte[] family) {
int numHFiles = 0;
for (Region region : rs.getRegions(tableName)) {
numHFiles += region.getStore(family).getStorefilesCount();
@@ -4321,10 +3808,9 @@
Collection<ColumnFamilyDescriptor> ltdFamilies = Arrays.asList(ltd.getColumnFamilies());
Collection<ColumnFamilyDescriptor> rtdFamilies = Arrays.asList(rtd.getColumnFamilies());
assertEquals(ltdFamilies.size(), rtdFamilies.size());
- for (Iterator<ColumnFamilyDescriptor> it = ltdFamilies.iterator(), it2 =
- rtdFamilies.iterator(); it.hasNext();) {
- assertEquals(0,
- ColumnFamilyDescriptor.COMPARATOR.compare(it.next(), it2.next()));
+ for (Iterator<ColumnFamilyDescriptor> it = ltdFamilies.iterator(),
+ it2 = rtdFamilies.iterator(); it.hasNext();) {
+ assertEquals(0, ColumnFamilyDescriptor.COMPARATOR.compare(it.next(), it2.next()));
}
}
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/MiniClusterRule.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/MiniClusterRule.java
index 099b82b..44a8cae 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/MiniClusterRule.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/MiniClusterRule.java
@@ -97,7 +97,7 @@
}
/**
- * @return the underlying instance of {@link HBaseTestingUtil}
+ * Returns the underlying instance of {@link HBaseTestingUtil}
*/
public HBaseTestingUtil getTestingUtility() {
return testingUtility;
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/SingleProcessHBaseCluster.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/SingleProcessHBaseCluster.java
index dc899e0..a405f7b 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/SingleProcessHBaseCluster.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/SingleProcessHBaseCluster.java
@@ -47,10 +47,9 @@
import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionServerStartupResponse;
/**
- * This class creates a single process HBase cluster.
- * each server. The master uses the 'default' FileSystem. The RegionServers,
- * if we are running on DistributedFilesystem, create a FileSystem instance
- * each and will close down their instance on the way out.
+ * This class creates a single process HBase cluster. each server. The master uses the 'default'
+ * FileSystem. The RegionServers, if we are running on DistributedFilesystem, create a FileSystem
+ * instance each and will close down their instance on the way out.
*/
@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.PHOENIX)
@InterfaceStability.Evolving
@@ -101,16 +100,16 @@
* each cluster start.
*/
public SingleProcessHBaseCluster(Configuration conf, int numMasters, int numAlwaysStandByMasters,
- int numRegionServers, List<Integer> rsPorts, Class<? extends HMaster> masterClass,
- Class<? extends SingleProcessHBaseCluster.MiniHBaseClusterRegionServer> regionserverClass)
- throws IOException, InterruptedException {
+ int numRegionServers, List<Integer> rsPorts, Class<? extends HMaster> masterClass,
+ Class<? extends SingleProcessHBaseCluster.MiniHBaseClusterRegionServer> regionserverClass)
+ throws IOException, InterruptedException {
super(conf);
// Hadoop 2
CompatibilityFactory.getInstance(MetricsAssertHelper.class).init();
init(numMasters, numAlwaysStandByMasters, numRegionServers, rsPorts, masterClass,
- regionserverClass);
+ regionserverClass);
this.initialClusterStatus = getClusterMetrics();
}
@@ -119,30 +118,29 @@
}
/**
- * Subclass so can get at protected methods (none at moment). Also, creates
- * a FileSystem instance per instantiation. Adds a shutdown own FileSystem
- * on the way out. Shuts down own Filesystem only, not All filesystems as
- * the FileSystem system exit hook does.
+ * Subclass so can get at protected methods (none at moment). Also, creates a FileSystem instance
+ * per instantiation. Adds a shutdown own FileSystem on the way out. Shuts down own Filesystem
+ * only, not All filesystems as the FileSystem system exit hook does.
*/
public static class MiniHBaseClusterRegionServer extends HRegionServer {
private Thread shutdownThread = null;
private User user = null;
/**
- * List of RegionServers killed so far. ServerName also comprises startCode of a server,
- * so any restarted instances of the same server will have different ServerName and will not
- * coincide with past dead ones. So there's no need to cleanup this list.
+ * List of RegionServers killed so far. ServerName also comprises startCode of a server, so any
+ * restarted instances of the same server will have different ServerName and will not coincide
+ * with past dead ones. So there's no need to cleanup this list.
*/
static Set<ServerName> killedServers = new HashSet<>();
public MiniHBaseClusterRegionServer(Configuration conf)
- throws IOException, InterruptedException {
+ throws IOException, InterruptedException {
super(conf);
this.user = User.getCurrent();
}
@Override
- protected void handleReportForDutyResponse(
- final RegionServerStartupResponse c) throws IOException {
+ protected void handleReportForDutyResponse(final RegionServerStartupResponse c)
+ throws IOException {
super.handleReportForDutyResponse(c);
// Run this thread to shutdown our filesystem on way out.
this.shutdownThread = new SingleFileSystemShutdownThread(getFileSystem());
@@ -196,15 +194,17 @@
}
/**
- * Alternate shutdown hook.
- * Just shuts down the passed fs, not all as default filesystem hook does.
+ * Alternate shutdown hook. Just shuts down the passed fs, not all as default filesystem hook
+ * does.
*/
static class SingleFileSystemShutdownThread extends Thread {
private final FileSystem fs;
+
SingleFileSystemShutdownThread(final FileSystem fs) {
super("Shutdown of " + fs);
this.fs = fs;
}
+
@Override
public void run() {
try {
@@ -232,7 +232,7 @@
// start up a LocalHBaseCluster
hbaseCluster = new LocalHBaseCluster(conf, nMasterNodes, numAlwaysStandByMasters, 0,
- masterClass, regionserverClass);
+ masterClass, regionserverClass);
// manually add the regionservers as other users
for (int i = 0; i < nRegionNodes; i++) {
@@ -240,8 +240,7 @@
if (rsPorts != null) {
rsConf.setInt(HConstants.REGIONSERVER_PORT, rsPorts.get(i));
}
- User user = HBaseTestingUtil.getDifferentUser(rsConf,
- ".hfs."+index++);
+ User user = HBaseTestingUtil.getDifferentUser(rsConf, ".hfs." + index++);
hbaseCluster.addRegionServer(rsConf, i, user);
}
@@ -296,7 +295,7 @@
@Override
public void waitForRegionServerToStop(ServerName serverName, long timeout) throws IOException {
- //ignore timeout for now
+ // ignore timeout for now
waitOnRegionServer(getRegionServerIndex(serverName));
}
@@ -392,7 +391,7 @@
@Override
public void waitForMasterToStop(ServerName serverName, long timeout) throws IOException {
- //ignore timeout for now
+ // ignore timeout for now
waitOnMaster(getMasterIndex(serverName));
}
@@ -400,20 +399,18 @@
* Starts a region server thread running
* @return New RegionServerThread
*/
- public JVMClusterUtil.RegionServerThread startRegionServer()
- throws IOException {
+ public JVMClusterUtil.RegionServerThread startRegionServer() throws IOException {
final Configuration newConf = HBaseConfiguration.create(conf);
return startRegionServer(newConf);
}
private JVMClusterUtil.RegionServerThread startRegionServer(Configuration configuration)
- throws IOException {
- User rsUser =
- HBaseTestingUtil.getDifferentUser(configuration, ".hfs."+index++);
- JVMClusterUtil.RegionServerThread t = null;
+ throws IOException {
+ User rsUser = HBaseTestingUtil.getDifferentUser(configuration, ".hfs." + index++);
+ JVMClusterUtil.RegionServerThread t = null;
try {
- t = hbaseCluster.addRegionServer(
- configuration, hbaseCluster.getRegionServers().size(), rsUser);
+ t =
+ hbaseCluster.addRegionServer(configuration, hbaseCluster.getRegionServers().size(), rsUser);
t.start();
t.waitForServerOnline();
} catch (InterruptedException ie) {
@@ -423,16 +420,15 @@
}
/**
- * Starts a region server thread and waits until its processed by master. Throws an exception
- * when it can't start a region server or when the region server is not processed by master
- * within the timeout.
- *
+ * Starts a region server thread and waits until its processed by master. Throws an exception when
+ * it can't start a region server or when the region server is not processed by master within the
+ * timeout.
* @return New RegionServerThread
*/
public JVMClusterUtil.RegionServerThread startRegionServerAndWait(long timeout)
- throws IOException {
+ throws IOException {
- JVMClusterUtil.RegionServerThread t = startRegionServer();
+ JVMClusterUtil.RegionServerThread t = startRegionServer();
ServerName rsServerName = t.getRegionServer().getServerName();
long start = EnvironmentEdgeManager.currentTime();
@@ -452,7 +448,7 @@
/**
* Cause a region server to exit doing basic clean up only on its way out.
- * @param serverNumber Used as index into a list.
+ * @param serverNumber Used as index into a list.
*/
public String abortRegionServer(int serverNumber) {
HRegionServer server = getRegionServer(serverNumber);
@@ -463,8 +459,7 @@
/**
* Shut down the specified region server cleanly
- *
- * @param serverNumber Used as index into a list.
+ * @param serverNumber Used as index into a list.
* @return the region server that was stopped
*/
public JVMClusterUtil.RegionServerThread stopRegionServer(int serverNumber) {
@@ -480,9 +475,8 @@
* @return the region server that was stopped
*/
public JVMClusterUtil.RegionServerThread stopRegionServer(int serverNumber,
- final boolean shutdownFS) {
- JVMClusterUtil.RegionServerThread server =
- hbaseCluster.getRegionServers().get(serverNumber);
+ final boolean shutdownFS) {
+ JVMClusterUtil.RegionServerThread server = hbaseCluster.getRegionServers().get(serverNumber);
LOG.info("Stopping " + server.toString());
server.getRegionServer().stop("Stopping rs " + serverNumber);
return server;
@@ -493,8 +487,7 @@
* @param serverNumber Used as index into a list.
*/
public JVMClusterUtil.RegionServerThread suspendRegionServer(int serverNumber) {
- JVMClusterUtil.RegionServerThread server =
- hbaseCluster.getRegionServers().get(serverNumber);
+ JVMClusterUtil.RegionServerThread server = hbaseCluster.getRegionServers().get(serverNumber);
LOG.info("Suspending {}", server.toString());
server.suspend();
return server;
@@ -505,8 +498,7 @@
* @param serverNumber Used as index into a list.
*/
public JVMClusterUtil.RegionServerThread resumeRegionServer(int serverNumber) {
- JVMClusterUtil.RegionServerThread server =
- hbaseCluster.getRegionServers().get(serverNumber);
+ JVMClusterUtil.RegionServerThread server = hbaseCluster.getRegionServers().get(serverNumber);
LOG.info("Resuming {}", server.toString());
server.resume();
return server;
@@ -520,16 +512,13 @@
return this.hbaseCluster.waitOnRegionServer(serverNumber);
}
-
/**
* Starts a master thread running
- *
* @return New RegionServerThread
*/
public JVMClusterUtil.MasterThread startMaster() throws IOException {
Configuration c = HBaseConfiguration.create(conf);
- User user =
- HBaseTestingUtil.getDifferentUser(c, ".hfs."+index++);
+ User user = HBaseTestingUtil.getDifferentUser(c, ".hfs." + index++);
JVMClusterUtil.MasterThread t = null;
try {
@@ -539,7 +528,7 @@
throw new IOException("Interrupted adding master to cluster", ie);
}
conf.set(HConstants.MASTER_ADDRS_KEY,
- hbaseCluster.getConfiguration().get(HConstants.MASTER_ADDRS_KEY));
+ hbaseCluster.getConfiguration().get(HConstants.MASTER_ADDRS_KEY));
return t;
}
@@ -556,7 +545,7 @@
* @return the active MasterThread, null if none is active.
*/
public MasterThread getMasterThread() {
- for (MasterThread mt: hbaseCluster.getLiveMasters()) {
+ for (MasterThread mt : hbaseCluster.getLiveMasters()) {
if (mt.getMaster().isActiveMaster()) {
return mt;
}
@@ -574,7 +563,7 @@
/**
* Cause a master to exit without shutting down entire cluster.
- * @param serverNumber Used as index into a list.
+ * @param serverNumber Used as index into a list.
*/
public String abortMaster(int serverNumber) {
HMaster server = getMaster(serverNumber);
@@ -585,8 +574,7 @@
/**
* Shut down the specified master cleanly
- *
- * @param serverNumber Used as index into a list.
+ * @param serverNumber Used as index into a list.
* @return the region server that was stopped
*/
public JVMClusterUtil.MasterThread stopMaster(int serverNumber) {
@@ -601,10 +589,8 @@
* test and you shut down one before end of the test.
* @return the master that was stopped
*/
- public JVMClusterUtil.MasterThread stopMaster(int serverNumber,
- final boolean shutdownFS) {
- JVMClusterUtil.MasterThread server =
- hbaseCluster.getMasters().get(serverNumber);
+ public JVMClusterUtil.MasterThread stopMaster(int serverNumber, final boolean shutdownFS) {
+ JVMClusterUtil.MasterThread server = hbaseCluster.getMasters().get(serverNumber);
LOG.info("Stopping " + server.toString());
server.getMaster().stop("Stopping master " + serverNumber);
return server;
@@ -619,24 +605,18 @@
}
/**
- * Blocks until there is an active master and that master has completed
- * initialization.
- *
- * @return true if an active master becomes available. false if there are no
- * masters left.
+ * Blocks until there is an active master and that master has completed initialization.
+ * @return true if an active master becomes available. false if there are no masters left.
*/
@Override
public boolean waitForActiveAndReadyMaster(long timeout) throws IOException {
- List<JVMClusterUtil.MasterThread> mts;
long start = EnvironmentEdgeManager.currentTime();
- while (!(mts = getMasterThreads()).isEmpty()
- && (EnvironmentEdgeManager.currentTime() - start) < timeout) {
- for (JVMClusterUtil.MasterThread mt : mts) {
+ while (EnvironmentEdgeManager.currentTime() - start < timeout) {
+ for (JVMClusterUtil.MasterThread mt : getMasterThreads()) {
if (mt.getMaster().isActiveMaster() && mt.getMaster().isInitialized()) {
return true;
}
}
-
Threads.sleep(100);
}
return false;
@@ -722,9 +702,8 @@
* Call flushCache on all regions on all participating regionservers.
*/
public void compact(boolean major) throws IOException {
- for (JVMClusterUtil.RegionServerThread t:
- this.hbaseCluster.getRegionServers()) {
- for(HRegion r: t.getRegionServer().getOnlineRegionsLocalContext()) {
+ for (JVMClusterUtil.RegionServerThread t : this.hbaseCluster.getRegionServers()) {
+ for (HRegion r : t.getRegionServer().getOnlineRegionsLocalContext()) {
r.compact(major);
}
}
@@ -734,10 +713,9 @@
* Call flushCache on all regions of the specified table.
*/
public void compact(TableName tableName, boolean major) throws IOException {
- for (JVMClusterUtil.RegionServerThread t:
- this.hbaseCluster.getRegionServers()) {
- for(HRegion r: t.getRegionServer().getOnlineRegionsLocalContext()) {
- if(r.getTableDescriptor().getTableName().equals(tableName)) {
+ for (JVMClusterUtil.RegionServerThread t : this.hbaseCluster.getRegionServers()) {
+ for (HRegion r : t.getRegionServer().getOnlineRegionsLocalContext()) {
+ if (r.getTableDescriptor().getTableName().equals(tableName)) {
r.compact(major);
}
}
@@ -760,7 +738,7 @@
}
/**
- * @return List of live region server threads (skips the aborted and the killed)
+ * Returns List of live region server threads (skips the aborted and the killed)
*/
public List<JVMClusterUtil.RegionServerThread> getLiveRegionServerThreads() {
return this.hbaseCluster.getLiveRegionServers();
@@ -775,10 +753,8 @@
}
public HRegionServer getRegionServer(ServerName serverName) {
- return hbaseCluster.getRegionServers().stream()
- .map(t -> t.getRegionServer())
- .filter(r -> r.getServerName().equals(serverName))
- .findFirst().orElse(null);
+ return hbaseCluster.getRegionServers().stream().map(t -> t.getRegionServer())
+ .filter(r -> r.getServerName().equals(serverName)).findFirst().orElse(null);
}
public List<HRegion> getRegions(byte[] tableName) {
@@ -791,7 +767,7 @@
HRegionServer hrs = rst.getRegionServer();
for (Region region : hrs.getOnlineRegionsLocalContext()) {
if (region.getTableDescriptor().getTableName().equals(tableName)) {
- ret.add((HRegion)region);
+ ret.add((HRegion) region);
}
}
}
@@ -809,12 +785,12 @@
/**
* Get the location of the specified region
* @param regionName Name of the region in bytes
- * @return Index into List of {@link SingleProcessHBaseCluster#getRegionServerThreads()}
- * of HRS carrying hbase:meta. Returns -1 if none found.
+ * @return Index into List of {@link SingleProcessHBaseCluster#getRegionServerThreads()} of HRS
+ * carrying hbase:meta. Returns -1 if none found.
*/
public int getServerWith(byte[] regionName) {
int index = 0;
- for (JVMClusterUtil.RegionServerThread rst: getRegionServerThreads()) {
+ for (JVMClusterUtil.RegionServerThread rst : getRegionServerThreads()) {
HRegionServer hrs = rst.getRegionServer();
if (!hrs.isStopped()) {
Region region = hrs.getOnlineRegion(regionName);
@@ -864,8 +840,8 @@
}
/**
- * Do a simulated kill all masters and regionservers. Useful when it is
- * impossible to bring the mini-cluster back for clean shutdown.
+ * Do a simulated kill all masters and regionservers. Useful when it is impossible to bring the
+ * mini-cluster back for clean shutdown.
*/
public void killAll() {
// Do backups first.
@@ -897,18 +873,17 @@
HRegionServer hrs = rst.getRegionServer();
for (Region region : hrs.getRegions(tableName)) {
if (region.getTableDescriptor().getTableName().equals(tableName)) {
- ret.add((HRegion)region);
+ ret.add((HRegion) region);
}
}
}
return ret;
}
-
protected int getRegionServerIndex(ServerName serverName) {
- //we have a small number of region servers, this should be fine for now.
+ // we have a small number of region servers, this should be fine for now.
List<RegionServerThread> servers = getRegionServerThreads();
- for (int i=0; i < servers.size(); i++) {
+ for (int i = 0; i < servers.size(); i++) {
if (servers.get(i).getRegionServer().getServerName().equals(serverName)) {
return i;
}
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/StartTestingClusterOption.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/StartTestingClusterOption.java
index 60e61f6..afd74bb 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/StartTestingClusterOption.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/StartTestingClusterOption.java
@@ -45,8 +45,8 @@
@InterfaceStability.Evolving
public final class StartTestingClusterOption {
/**
- * Number of masters to start up. We'll start this many hbase masters. If numMasters > 1, you
- * can find the active/primary master with {@link SingleProcessHBaseCluster#getMaster()}.
+ * Number of masters to start up. We'll start this many hbase masters. If numMasters > 1, you can
+ * find the active/primary master with {@link SingleProcessHBaseCluster#getMaster()}.
*/
private final int numMasters;
@@ -63,9 +63,8 @@
private final Class<? extends HMaster> masterClass;
/**
- * Number of region servers to start up.
- * If this value is > 1, then make sure config "hbase.regionserver.info.port" is -1
- * (i.e. no ui per regionserver) otherwise bind errors.
+ * Number of region servers to start up. If this value is > 1, then make sure config
+ * "hbase.regionserver.info.port" is -1 (i.e. no ui per regionserver) otherwise bind errors.
*/
private final int numRegionServers;
/**
@@ -96,13 +95,13 @@
private final int numZkServers;
/**
- * Whether to create a new root or data directory path. If true, the newly created data directory
- * will be configured as HBase rootdir. This will overwrite existing root directory config.
+ * Whether to create a new root or data directory path. If true, the newly created data directory
+ * will be configured as HBase rootdir. This will overwrite existing root directory config.
*/
private final boolean createRootDir;
/**
- * Whether to create a new WAL directory. If true, the newly created directory will be configured
+ * Whether to create a new WAL directory. If true, the newly created directory will be configured
* as HBase wal.dir which is separate from HBase rootdir.
*/
private final boolean createWALDir;
@@ -174,15 +173,15 @@
@Override
public String toString() {
- return "StartMiniClusterOption{" + "numMasters=" + numMasters + ", masterClass=" + masterClass
- + ", numRegionServers=" + numRegionServers + ", rsPorts=" + StringUtils.join(rsPorts)
- + ", rsClass=" + rsClass + ", numDataNodes=" + numDataNodes
- + ", dataNodeHosts=" + Arrays.toString(dataNodeHosts) + ", numZkServers=" + numZkServers
- + ", createRootDir=" + createRootDir + ", createWALDir=" + createWALDir + '}';
+ return "StartMiniClusterOption{" + "numMasters=" + numMasters + ", masterClass=" + masterClass +
+ ", numRegionServers=" + numRegionServers + ", rsPorts=" + StringUtils.join(rsPorts) +
+ ", rsClass=" + rsClass + ", numDataNodes=" + numDataNodes + ", dataNodeHosts=" +
+ Arrays.toString(dataNodeHosts) + ", numZkServers=" + numZkServers + ", createRootDir=" +
+ createRootDir + ", createWALDir=" + createWALDir + '}';
}
/**
- * @return a new builder.
+ * Returns a new builder.
*/
public static Builder builder() {
return new Builder();
@@ -190,7 +189,7 @@
/**
* Builder pattern for creating an {@link StartTestingClusterOption}.
- *
+ * <p/>
* The default values of its fields should be considered public and constant. Changing the default
* values may cause other tests fail.
*/
@@ -214,9 +213,9 @@
if (dataNodeHosts != null && dataNodeHosts.length != 0) {
numDataNodes = dataNodeHosts.length;
}
- return new StartTestingClusterOption(numMasters,numAlwaysStandByMasters, masterClass,
- numRegionServers, rsPorts, rsClass, numDataNodes, dataNodeHosts, numZkServers,
- createRootDir, createWALDir);
+ return new StartTestingClusterOption(numMasters, numAlwaysStandByMasters, masterClass,
+ numRegionServers, rsPorts, rsClass, numDataNodes, dataNodeHosts, numZkServers,
+ createRootDir, createWALDir);
}
public Builder numMasters(int numMasters) {
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.java
index db7c89c..bedc104 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.java
@@ -41,6 +41,7 @@
import org.apache.hadoop.hbase.HBaseTestingUtil;
import org.apache.hadoop.hbase.HConstants;
import org.apache.hadoop.hbase.HRegionLocation;
+import org.apache.hadoop.hbase.MetaTableAccessor;
import org.apache.hadoop.hbase.ServerName;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Admin;
@@ -108,9 +109,10 @@
* Debugging method to dump the contents of meta.
*/
protected void dumpMeta(TableName tableName) throws IOException {
- List<byte[]> metaRows = TEST_UTIL.getMetaTableRows(tableName);
- for (byte[] row : metaRows) {
- LOG.info(Bytes.toString(row));
+ List<RegionInfo> regions =
+ MetaTableAccessor.getTableRegions(TEST_UTIL.getConnection(), tableName);
+ for (RegionInfo region : regions) {
+ LOG.info(region.getRegionNameAsString());
}
}
@@ -210,7 +212,6 @@
LOG.info(hri.toString() + hsa.toString());
}
- TEST_UTIL.getMetaTableRows(htd.getTableName());
LOG.info("*** After delete:");
dumpMeta(htd.getTableName());
}
diff --git a/hbase-zookeeper/src/test/java/org/apache/hadoop/hbase/HBaseZKTestingUtil.java b/hbase-zookeeper/src/test/java/org/apache/hadoop/hbase/HBaseZKTestingUtil.java
index acc5f14..e1223ce 100644
--- a/hbase-zookeeper/src/test/java/org/apache/hadoop/hbase/HBaseZKTestingUtil.java
+++ b/hbase-zookeeper/src/test/java/org/apache/hadoop/hbase/HBaseZKTestingUtil.java
@@ -54,8 +54,8 @@
}
/**
- * @return Where the cluster will write data on the local subsystem. Creates it if it does not
- * exist already. A subdir of {@code HBaseCommonTestingUtility#getBaseTestDir()}
+ * Returns Where the cluster will write data on the local subsystem. Creates it if it does not
+ * exist already. A subdir of {@code HBaseCommonTestingUtility#getBaseTestDir()}
*/
Path getClusterTestDir() {
if (clusterTestDir == null) {
@@ -99,7 +99,7 @@
* @return zk cluster started.
*/
public MiniZooKeeperCluster startMiniZKCluster(int zooKeeperServerNum, int... clientPortList)
- throws Exception {
+ throws Exception {
setupClusterTestDir();
return startMiniZKCluster(clusterTestDir, zooKeeperServerNum, clientPortList);
}
@@ -109,7 +109,7 @@
* port mentioned is used as the default port for ZooKeeper.
*/
private MiniZooKeeperCluster startMiniZKCluster(File dir, int zooKeeperServerNum,
- int[] clientPortList) throws Exception {
+ int[] clientPortList) throws Exception {
if (this.zkCluster != null) {
throw new IOException("Cluster already running at " + dir);
}
@@ -159,7 +159,7 @@
* users. Don't close it, it will be closed automatically when the cluster shutdowns
* @return The ZKWatcher instance.
*/
- public synchronized ZKWatcher getZooKeeperWatcher() throws IOException {
+ public ZKWatcher getZooKeeperWatcher() throws IOException {
if (zooKeeperWatcher == null) {
zooKeeperWatcher = new ZKWatcher(conf, "testing utility", new Abortable() {
@Override
@@ -177,27 +177,7 @@
}
/**
- * Gets a ZKWatcher.
- */
- public static ZKWatcher getZooKeeperWatcher(HBaseZKTestingUtil testUtil) throws IOException {
- return new ZKWatcher(testUtil.getConfiguration(), "unittest", new Abortable() {
- boolean aborted = false;
-
- @Override
- public void abort(String why, Throwable e) {
- aborted = true;
- throw new RuntimeException("Fatal ZK error, why=" + why, e);
- }
-
- @Override
- public boolean isAborted() {
- return aborted;
- }
- });
- }
-
- /**
- * @return True if we removed the test dirs
+ * Returns true if we removed the test dirs
*/
@Override
public boolean cleanupTestDir() {